script 任务继续往下执行,执行了async1()函数,前面讲过async函数中在await之前的代码是立即执行的,所以会立即输出async1 start。 遇到了await时,会将await后面的表达式执行一遍,所以就紧接着输出async2,然后将await后面的代码也就是console.log('async1 end')加入到microtask中的Promise队列中,接着跳出async1函数来执...
1. async其实就是对Generator的封装,只不过async可以⾃动执⾏next()。2. async必须等到⾥⾯所有的await执⾏完,async才开始return,返回的Promise状态才改变。除⾮遇到return和错误。3. async默认返回⼀个Promise,如果return不是⼀个Promise对象,就会被转为⽴即resolve的Promise,可以在then函数中获取...
接下来执行resolve(async2返回的promise返回的),输出了async1 end; 然后执行resolve(new Promise的),输出了promise2; 最后执行setTimeout,输出了settimeout。 在第4步中, await 这里有一个机制, 就是 await 的等待, 不会阻塞外部函数的执行, 而 await 等待的 如果是一个 Promise 则 Promise 里面的代码还是...
从一道题目出发 今天看到一道面试题,是关于async/await、promise和setTimeout的执行顺序,题目如下: asyncfunctionasync1() { console.log('async1 start'); awaitasync2(); console.log
async function 相当于返回 () await 后面的代码都是异步的,微任务;setTimeout是宏任务 初始化Promise时,函数内部代码会被立即执行 代码示例 考点1:、执行顺序 Promise.resolve().then(() =>{// 优先寻找then console.log(1); }).catch(() =>{ ...
先指明这道题是面试题的改版,原题可以看:promise、async和await之执行顺序的那点事 这道题也不是我改的,出处见:async/await 执行顺序详解 这两篇文章写的非常好,我仔细琢磨了一下,感觉受益匪浅,决定记录一下自己的理解。 不再废话,下面见题: async function testSometing() { ...
async testAsync() { // 在异步函数前面加上await,函数执行就会等待用await声明的异步函数执行完毕之后,在往下执行 await getJSON() ...剩下的代码 } 以上就是async/await最基本的用法。 还需要注意的一点就是使用async/await的时候,是无法捕获错误的,这个时候就要用到我们es5里面一个被大家遗忘了的try/catch,...
今天给大家分享promise,笔者将从早期的异步代码的困境、promise出现解决了什么问题、异步回调地狱的终极方案并且实现async await的核心语法,其实async/await只是generator+promise的一个变种而已。这是坚持写博客的第三周,坚持下去事情总是会变好! 给大家推荐一个实用面试题库 ...
学习过程中遇到的一些基础的Promise、async、await面试题整理。 出题目的: 考察Promise、async、await 的基础 考察队Event Loop、宏任务、微任务的理解 知识点: JS 执行顺序:单线程,自上而下、先同步后异步、先微任务后宏任务 new promise() -> Promise.resolve(),触发then ...
async function 相当于返回 Promise.resolve() await 后面的代码都是异步的,微任务;setTimeout是宏任务 初始化Promise时,函数内部代码会被立即执行 代码: 考点1:Promise.resolve、Promise.reject执行顺序 Promise.resolve().then(()=>{// 优先寻找then