同步不应该是执行这一段才往下执行
await是等待的意思,等待后面执行完成再执行下一段
那这不应该是同步么?我看很多技术文章都说async/await是异步操作
why~~有点不理解
同步不应该是执行这一段才往下执行
await是等待的意思,等待后面执行完成再执行下一段
那这不应该是同步么?我看很多技术文章都说async/await是异步操作
why~~有点不理解
只是在当前async
函数体内,将异步
操做模拟成了同步
操做,并不影响与它并行的代码的执行。实际上await
还是一个回调函数
的语法糖
// => 马上执行
// => 我两秒后执行了
;(async function () {
await sleep(2000)
console.log('我两秒后执行了')
})()
console.log('马上执行')
function sleep (milliSecond) {
return new Promise(resolve => setTimeout(resolve, milliSecond))
}
async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。
async/await
其实就是把 await
之后的函数变成了一个 promise
,只不过是把 promise
的链式调用写法改成了看起来像同步的写法,就不需要每次都 .then
一直点下去了,增加可读性。
其实就是 Generator
+ Promise
的语法糖。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
打印顺序会是
Promise<>
、2
、1
,这说明只有console.log(1)
会因等待await 1
而延期,外面的console.log(2)
则是直接执行的,如果是同步的话理应先 1 后 2。奥秘就在
asyncFunc
自动返回的这个Promise
里:被迫“延期执行”的代码其实被装进了这个Promise
的resolver
里了,而Promise
的resolver
会被添加到微任务队列……