在 React Native 中使用 async/await 处理 API 调用

Posted

技术标签:

【中文标题】在 React Native 中使用 async/await 处理 API 调用【英文标题】:Handling API calls with async/await in React Native 【发布时间】:2019-01-05 11:15:12 【问题描述】:

我想要一个单独的文件用于 API 调用 -

APIHandler.js

const loginAPI = 'https://..../login';

export async function login(emailAddress, pass) 
    const reqOptions = 
        method: 'POST',
        headers: 
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        ,
        body: JSON.stringify(

            email: emailAddress,
            password: pass,

        )
    ;

    let response = await fetch(loginAPI, reqOptions);
    return response;

现在在我的login.js,我想这样做:

onLoginPressed = async () => 
    let response = login(this.state.email, this.state.password)

    if (response.status >= 200 && response.status < 300) 
       //Login success
     else 
        //Login error
    

但这似乎不起作用。按登录后,没有任何反应。谁能告诉我哪里做错了。

【问题讨论】:

【参考方案1】:

由于login 是一个异步函数,并且您想等待从login 返回的响应,您也必须await 调用login

let response = await login(this.state.email, this.state.password)

login 本身等待 fetch 调用完成。所以你要等待login 完成,你必须等待它。如果您不这样做,login 会返回一个承诺,正如您所观察到的,它不是来自请求的响应对象。

【讨论】:

以上是关于在 React Native 中使用 async/await 处理 API 调用的主要内容,如果未能解决你的问题,请参考以下文章

react-native-sqlite-storage 中的 React Native Async Await

在 React Native 中,这两种方法中哪种 Async Await 方法更好,为啥?

在 react-native 组件中实现 async/await 功能

react-native async 函数返回 promise 但不返回我的 json 数据?

react-native 异步存储不保存,也没有错误

React-Native:无法将 babel 更新到 ES7