如果我在非异步函数中调用 `AsyncStorage.setItem` 而没有 await 会发生什么?

晚上好

我正在使用fetch方法从服务器获取一些数据。获得这些数据后,我需要将其中的一些(access_token 更准确地说,因为我使用的是 oauth)存储在AsyncStorage. 我尝试在AsyncStorage.setItem没有等待的情况下进行操作,而不是在https://facebook.github.io/react-native/docs/asyncstorage 中显示的方式,并且效果很好。

我把它改成:

fetch ('site/login', POST ...)
.then((response) => response.json())
.then(async(responseJson) => {
   if (user.valid)
    await AsyncStorage.setItem('access_token', responseJson.token);

它也能正常工作。但我现在有两个问题:

我的 fetch 和 async 实现是否正确?

如果我在这种情况下不使用 await/async 会发生什么?

抱歉,我对 Javascript 中的 Promise 和异步方法有点陌生。谢谢!

贾里德·史密斯

async/await只是 Promises 上的语法糖。您已经在使用 Promises,所以没有必要这样做。只需返回承诺:

fetch ('site/login', POST ...)
.then((response) => response.json())
.then((responseJson) => {
  if (user.valid) { // not sure where 'user' came from, but whatever
    return AsyncStorage.setItem('access_token', responseJson.token);
  } else {
    throw new Error('Invalid user');
  }
})
.then(_ => { // storage set, don't care about return value
  // do stuff
})
.catch((err) => {
  // handle error, including invalid user
});

在评论中回答问题

上面的 async/await 看起来像这样:

async function foo() {
  try {
    const response = await fetch('site/login', POST ...);
    const responseJson = await response.json();
    if (user.valid) {
      return await AsyncStorage.setItem('access_token', responseJson.token);
    } else {
      throw new Error('Invalid user');
    }
  } catch (error) {
    // deal with errors
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

没有await关键字的调用async方法到底会发生什么?

无法在AsyncStorage中设置setItem

为什么使用 AsyncStorage.setItem 是不行的?

如果我没有在头文件中声明所有函数,会发生什么?

如果在DLL中调用函数时没有传递足够的参数,会发生什么?

C#。如果“after await”线程忙会发生什么?

内存中返回的对象(没有返回)会发生什么?

为什么我的 asyncstorage 没有立即同步

AsyncStorage getItem 和 setItem 在 Android 设备中不起作用

如果汇编程序中没有退出系统调用,会发生什么?

如果没有或只有部分字段在构造函数初始化会发生什么

如果我没有收到带有getDynamicLink(intent)的dynamicLink,会发生什么?

如果没有处理程序,Azure IoT 中心直接方法调用会发生什么

如果我没有在Corb中指定集合名称,会发生什么

如果我为没有CPU / RAM的主板供电,会发生什么?

如果我没有为数据库定义特定的模式会发生什么?

如果将IEnumerable与async / await一起使用(从带有Dapper的SQL Server中流式传输数据)一起使用,会发生什么情况?

如果所述表中没有列被 SELECT-ed,JOIN 会发生什么?

如果所述表中没有列被 SELECT-ed,JOIN 会发生什么?

在JavaScript中,如果我分配给具有getter但没有setter的对象属性,会发生什么?

如果没有事务,如果回滚表会发生什么?

如果在laravel5中没有DB :: commit()的情况下调用DB :: beginTransaction,会发生什么?

如果没有`<slot />`而是影子根,子节点会发生什么

如果没有#pragma pop_macro的#pragma push_macro,会发生什么?

如果没有消息发送回贝宝,贝宝 IPN 会发生什么

conn切换数据时,如果没有数据可以传输,会发生什么?

如果在 >(重定向)之后没有定义目的地会发生什么?

如果带 for 循环的 range() 没有完全到达结束编号会发生什么?

在没有分配的情况下调用std :: move()会发生什么