async/await 处理多个方法时的问题?

图片描述

loginInit 方法调用了 login 和 getUserInfo和 loginPost 方法。
经过测试login 和 getUserInfo中mpvue调用的方法是异步,用async/await 的话如何处理?
阅读 5.6k
5 个回答

async/awaitpromise的语法糖,所以要使用它就必须将你的返回值改写成promise如下:

getUserInfo() {
    return new Promise((resolve, reject) => {
        mpvue.getUserInfo({
            success: function(res) {
                resolve(res);
            },
            fail: function(err) {
                reject(err);
            }
        });
    });
},
async loginInit() {
    await this.getUserInfo();
}
async loginInit() {
    await this.login()
    await this.getUserInfo()
    await loginPost()
}

loginPost没问题,login 和 getUserInfo得返回Promise,你得封装一下,然后用await调用
好好学一下Promise,想用async/await绕不开的

让login和getUserInfo返回一个promise对象,然后loginInit就可以在调用这两个方法前面加上await,

async getUserInfo(){
    return new Promise((resolve,reject)=>{
        mpvue.getUserInfo(
            {
                success:(res)=>{
                    ...
                    resolve(res);
                }
            }
        );
    });
}

首先,await 后面必须是一个 Promise 对象

这段代码你可以理解为 异步代码同步化的一种实现 ,但是你要确认 await 后面的 Api.Login() 返回的是不是一个 Promise 对象

其他的异步函数同步化执行也是一样的原理,原理可以参考 GeneratorPromise

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题