什么是在另一个内部调用一个异步函数的最佳方法?

时间:2018-04-02 18:13:07

标签: javascript reactjs react-native promise async-await

我正在使用AsyncStorage在React Native应用上进行简单身份验证以保留令牌。在获取之后,我需要调用AsyncStorage来保存我收到的令牌。我正在寻求建议:最佳实践方法是什么?

function login(username, password) {
  const requestOptions = {
    "method": "POST",
    "headers": { "Content-Type": "application/json" },
    "body": JSON.stringify({ username, password })
  };
  return fetch(`${BASE_URL}/authenticate`, requestOptions)
    .then(response => {
      return response.json();
    })
    .then(res => {
      AsyncStorage.setItem("@Storage:key", user.token).then();//doing smth);
      return res;                    
    });
}

2 个答案:

答案 0 :(得分:3)

您将等待所有异步请求

async function login(username, password) {

    const requestOptions = {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ username, password })
    }

    const res = await fetch(`${BASE_URL}/authenticate`, requestOptions)
    const response = await response.json();
    await AsyncStorage.setItem('@Storage:key', user.token)
    return response.msg
}

答案 1 :(得分:0)

一般来说,链接Promises是最干净的方式之一。例如,像:

return fetch(url)
  .then(res => res.json())
  .then(res => AsyncStorage.setItem('key', token).then(res => res.msg));

你怎么拥有它。

如果您可以使用Babel进行转换,使用async/await可以使其更好:

const res = await (await fetch(url)).json();
await AsyncStorage.setItem('key', token);

使用awaitasync,只要您await上的Promise,就可以将其视为与非异步代码相同。