【问题标题】:How to pass value from promise to parent scope? [duplicate]如何将值从承诺传递到父范围? [复制]
【发布时间】:2019-03-22 17:35:32
【问题描述】:

我一直在尝试在 react-native 上使用 expo 获取用户语言环境。问题是,我需要获取承诺值并将其传递给返回函数。该值当前为“未定义”。

这是代码:

export default locales = () => {
  var locals;
  Expo.DangerZone.Localization.getCurrentLocaleAsync().then((value) => {
    locals = value;
  });
return locals;
}

我如何获得承诺值并在函数中返回它?

【问题讨论】:

  • 您是想将此值传递给父作用域还是返回给调用者?这些是不同的问题,尽管两者都受到提供值的异步操作的不确定时间以及函数在获得异步值之前返回的事实的挑战(这就是你看到undefined的原因。

标签: function react-native scope promise expo


【解决方案1】:

return locals; 在你的承诺返回之前发生,undefined 也是如此。你需要使用回调:

export default locales = (callback) => {
  Expo.DangerZone.Localization.getCurrentLocaleAsync().then((value) => {
    return callback(value);
  });
}

然后您可以像这样访问该值:

your_module.locales((locals)=>{
  // use locals here
});

或者,如果您可以在较新版本的节点中访问 async/await:

export default locales = async () => {
  let value = await Expo.DangerZone.Localization.getCurrentLocaleAsync()
  return value;
}

然后你会这样调用函数:

let locals = await your_module.locales()

但是,考虑到有一个函数Expo.DangerZone.Localization.getCurrentLocaleAsync(),您确定不存在同步版本getCurrentLocaleSync()getCurrentLocale()?这将使这更容易,您可以直接调用函数并获取值。

【讨论】:

    猜你喜欢
    • 2016-03-31
    • 1970-01-01
    • 2018-01-06
    • 2019-02-10
    • 1970-01-01
    • 2018-07-03
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多