【问题标题】:Wait until async is completed (await)等到异步完成(等待)
【发布时间】:2019-05-31 01:51:04
【问题描述】:

我正在尝试使用异步/等待来解决问题

我在 react-native 中为我的项目使用 https://github.com/sunnylqm/react-native-storage

我正在使用异步存储来存储一些关键信息,例如选定的用户区域设置,我需要在根据选定的区域设置将屏幕呈现到显示屏幕之前检索此值。

我尝试过实现几个辅助函数,它与回调一起使用,我需要的是返回值而不是回调并等待获取值。以下是我尝试过的几个示例。

// 1
_selectedLocale = async () => {
  try {
    const value = await global.storage.load({key: 'selectedLocale'});
    return value
   } catch (error) {
     console.log(value)
   }
}
var selectedLocale = _selectedLocale();

// 2
export async function _selectedLocale() {
  return storage.load({key: 'selectedLocale'});
}
var selectedLocale = _selectedLocale();
// 3
export function selectedLocale(callback) {
  storage.load({key: 'selectedLocale'}).catch(e => {
    callback(RNLanguages.language);
  }).then(function(locale) {
    callback(locale);
  });
}

这不起作用,我正在寻找

  1. 实现一个辅助函数以根据键检索值
  2. 等到检索到值(同步)

谁能指出正确的方向

谢谢

更新1:

这是我如何使用回调

selectedLocale(function(locale) {
  global.layoutIsRTL = 'ar' == locale;
  ReactNative.I18nManager.allowRTL(true);
  global.i18n.locale = locale
});

更新 2:

似乎有人已经这样做了,这是参考https://github.com/sunnylqm/react-native-storage/issues/206 不幸的是我很难理解它。

【问题讨论】:

  • selectedLocale 永远是一个承诺,这只是预期的。 await 不会停止世界,只会停止当前的函数体。
  • 您能否发布一下您如何使用回调函数?
  • @Bergi 更新了我的代码,请检查
  • 关于回调很抱歉,我还没有发布我用于回调的另一个函数,让我更新帖子。
  • @Bergi 我在代码示例中添加了#3,带有回调助手。

标签: javascript react-native promise es6-promise


【解决方案1】:

async 隐式返回一个promise,所以如果你想要那里的值,你也需要等待函数调用:

var selectedLocale = await _selectedLocale();

但你只能在另一个 async 函数中这样做

【讨论】:

  • 啊,坦率地说,我正在寻找一种解决方法,让它像同步一样工作,即使这意味着它必须等待执行,是否没有解决方法?
  • 哦,我明白了,是的,虽然我对此了解不多,但我从未与他们合作过,但听起来你正在寻找生成器developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…*
猜你喜欢
  • 2020-10-04
  • 2019-06-16
  • 2018-03-05
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多