Promise 面试题 async-await
let app = ()=>{
return new Promise((*resolve*) => {
console.log(2);
resolve("app执行完毕");
}).then((*data*) => {
console.log(4);
return *data*
})
}
async function a(){
console.log(1);
let data = await app()
console.log(3);
console.log(data);
}
a().then((*result*) => {
console.log("最后的结果");
})
console.log("out");
《ECMAScript 6 入门》中对async函数的定义:
async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。
async函数遇到await会先返回,即在整个async函数体中的语句保持同步,但是async函数外的语句会仍然会js原本的执行顺序保持同异步。
即例子的a函数内的log(3)会跟整个保持同步,等待app()完成。跟a()同层的console.log("out")语句不会跟a()内的app()保持同步。
当a执行到await时,进一步到app的than调用时就暂时挂起a函数,接着去执行a函数体之外的、后面的语句。
总结:async函数只保证的函数体的语句是同步执行,整个js的执行线程仍然是异步的