ES6 / 7等待异步功能

时间:2017-04-18 14:43:08

标签: javascript asynchronous async-await es6-promise ecmascript-2017

我读到await停止执行,而承诺没有得到解决。我正在尝试在我的React-native应用程序中执行以下操作:

static async getFromStorage(key) {
  const value = await AsyncStorage.getItem(key);
  console.log(value);
  return value;
}

console.log(Class.getFromStorage("test"));

但我得到以下内容而不是真正的价值(Chrome不允许我复制时间戳......):

  • 承诺{_45:0,_81:0,_65:null,_54:null}< - 这是函数后的console.log
  • 100ms后
  • REAL_VALUE< - 这是函数
  • 中的console.log

那么为什么我的代码不等待解决承诺?

更新

@thedude建议:

async function waitForStorage() {
   console.log(await getFromStorage());
}
waitForStorage();

这个解决方案的问题我在课堂上需要它,我想要使用它。但当我someVar = await getFromStorage()时,我得到500错误。我可以等,因为它是100毫秒。

例如:

someVar = await getFromStorage("token");
checkToken(someVar);

1 个答案:

答案 0 :(得分:1)

运行console.log的代码也应标记为async,并且还应await getFromStorage的返回值;

e.g。这会奏效:

async function waitForStorage() {
   console.log(await getFromStorage());
}
waitForStorage(); // now the console messages should be in the correct order

或者你可以等待承诺的解决方案:

getFromStorage("token").then(someVar => checkToken(someVar))