async和 await
总结一句话,async 内部的await同步进行,但是async外部是异步的。
一个例子即可解释
// 1s 之后返回2倍的值
function timeout (num) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(num * 2)
}, 1000)
})
}
async function testResult() {
let x = await timeout(1);//x=2
let x1 = await timeout(x); //x1 = 4
let x2 = await timeout(x1); // x2 = 8
console.log(x + x1 + x2);
}
testResult()
console.log('我先执行!!!')
输出:我先执行!!!
14
1.**async 是一个通过异步执行并隐式返回 Promise 作为结果的函数** ,如果async函数中有返回值,当调用该函数时,内部会调用Promise.resolve()方法把它转化成一个promise对象作为返回,但如果timeout函数内部抛出错误就会调用Promise.reject() 返回一个promise 对象。
2/async作为一个关键字放在函数前面,表示该函数是一个异步函数,异步函数意味着该函数的执行不会阻塞后面代码的执行;而 await 用于等待一个异步方法执行完成;
3.await 等待一个 Promise 对象,如果 Promise的状态变成了 resolve 或者 rejcet,那么 async函数会恢复执行。或者阻塞该函数内后面的代码。
4.当遇到 `await` 时,**会阻塞函数内部处于它后面的代码(而非整段代码)**,去执行该函数外部的同步代码;当外部的同步代码执行完毕,再回到该函数执行剩余的代码。**并且当 `await` 执行完毕之后,会优先处理函数内部的代码。**