标签:resolve res 任务 resolved 方法 主线程 nbsp UNC timeout
let promise = new Promise(resolve => { console.log(‘Promise‘); resolve(); }); promise.then(function(){ console.log(‘resolved‘); }); console.log(‘hello~‘);
打印结果一次为Promise hello~ resolved
Promise 新建后立即执行,所以首先输出的是Promise,然后,then方法指定的回调函数,将在当前脚本所有同步任务执行完才会执行,所以resolved最后输出
let promise=new Promise(resolve=>{ resolve(); console.log(‘promise‘);//1 }) console.log(promise);//2 setTimeout(function(){ console.log(‘hello‘);//4 }) promise.then(function(){ console.log(‘resolved‘);//3 }) //then和setTimeout不都是异步操作吗,为什么hello还是最后输出呢?
then和setTimeout确实都是异步的,但是这里又涉及到异步的宏任务和微任务,setTimeout是宏任务,Promise整体是微任务,主线程执行完了之后先从微任务栈里面获取微任务执行,没有微任务了,就去宏任务栈里面获取宏任务执行,微任务是比宏任务先执行的,所以先打印resolved在打印hello
标签:resolve res 任务 resolved 方法 主线程 nbsp UNC timeout
原文地址:https://www.cnblogs.com/rickdiculous/p/13237283.html