使用async/await将axios异步请求同步化处理

ES7的异步特性async / await

async用于申明一个函数是异步的,await等待异步请求完成,await只能在async方法中使用。
var fun1 = async function(){
    await axios.get(url,params);
    ......
}
在调用fun1的方法中我们需要修饰为async异步方法,并且await修饰fun1方法。
var fun2 = async function(){
    await fun1();
}

在Vue项目中实现

getInfoFn: async function(){
    var that = this;
    await that.$api.scheduleApi.queryScheduleInfoFn(
      {caseNo:  that.basicInfo.caseNo}).then(function (response) {
      if(response.data.code == '200') {
        var result = response.data.result;
      }
    });
},
// 调用getInfoFn()也需要修饰为异步
changeConfigFn: async function(config){
    await this.getSheduleInfoFn();
    // 执行其它操作
}

await 等到之后,做了一件什么事情?

那么右侧表达式的结果,就是await要等的东西。
等到之后,对于await来说,分2个情况

不是promise对象
是promise对象
如果不是 promise , await会阻塞后面的代码,先执行async外面的同步代码,同步代码执行完,再回到async内部,把这个非promise的东西,作为 await表达式的结果。
如果它等到的是一个 promise 对象,await 也会暂停async后面的代码,先执行async外面的同步代码,等着 Promise 对象 fulfilled,然后把 resolve 的参数作为 await 表达式的运算结果。

promise chain 中如何传递参数

但是在实际的使用场景中,任务之间通常都是有关联的,比如 taskB 需要依赖 taskA 的处理结果来执行,这有点类似 Linux 管道机制。 Promise 中处理这个问题也很简单,那就是在 taskA 中 return 的返回值,会在 taskB 执行时传给它。

你可能感兴趣的:(js,Vue)