我有一个函数,其中一个“ then”函数嵌套在一个返回值中。我希望将此退货添加到外部退货中。看到代码:public async getAllWidgets(): Promise <Widget[]> { let settings = new SettingsRepository(this.context, null); let data: Widget[]; settings.CountryUrl().then(async(url) => { var repositoryUserCountryUrl = new ListRepository(url); var cacheKey = "QuickLinksLinksAllWidgets"; let widgets: any[]; let multiLingual = await settings.MultiLingual(this.absoluteWebUrl); if (multiLingual) { let currentLanguage = await Languages.getLanguage(this.context, null, this.absoluteWebUrl); cacheKey += "-" + currentLanguage; widgets = await repositoryUserCountryUrl.getListItemsByUrlLanguageAware(Constants.QuickLinksListUrl, `local-${cacheKey}`, currentLanguage); } else { widgets = await repositoryUserCountryUrl.getListItemsByUrl(Constants.QuickLinksListUrl, `local-${cacheKey}`); } let result: Widget[] = []; widgets.map((item) => { result.push(this.parseWidget(item)); }); let data: Widget[] = result; return data; /// HAVE ALL THE DATA I NEED }); return new Promise <Widget[]> (async(resolve) => { console.log("data in return" + data) resolve(data); /// UNDEFINED DATA });}当我调用上面的函数时,即使第一个内部返回包含数据,我也什么也没得到,所以我想我必须以某种方式将其添加到外部返回中。我该怎么做?
1 回答

BIG阳
TA贡献1859条经验 获得超6个赞
您必须将整个函数包装在新的Promise中,不仅要像您所做的那样在最后,然后解析data变量。您不能从异步内部返回并期望它不会被未定义,因为该函数可以正常运行并在加载数据之前结束。
所以...
public async getAllWidgets(): Promise<Widget[]> {
return new Promise((resolve, error) => {
// your data calculations...
resolve(data)
}
}
添加回答
举报
0/150
提交
取消