promise例题

            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

posted @ 2020-07-04 23:53  是桂  阅读(150)  评论(0编辑  收藏  举报