为了账号安全,请及时绑定邮箱和手机立即绑定

从函数的内部范围返回值

从函数的内部范围返回值

万千封印 2021-05-14 10:13:56
我有一个函数,其中一个“ 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)

    }

}


查看完整回答
反对 回复 2021-05-27
  • 1 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信