关于promise面试题

时间:2025-01-18 21:36:28

1. promise的几个API

(1)

(1)

([promise1,promise2,promise3])

([promise1,promise2,promise3])

2. promise的三个状态
pending,表示进行中

fulfilled也是resolved,表示成功

rejected,表示失败

的状态变化
只能从pending->resolved或者pending->rejected

promise的状态改变后就不会再次改变会一直保持这个状态,而且promise不会受到外界的影响,只会受到异步操作的结果的影响

的基本用法
new Promise((resolve,reject)=>{
                if(true){
                    resolve(value);
                }else{
                    reject(err);
                }
            }).then(
                value=>{};
                reason=>{};
            ).catch(
            )
新建一个promise构造函数,函数接受一个函数作为参数,同时该函数有两个参数,reject和resolve

执行异步操作

成功执行resolve(),状态变成resolved状态

失败执行reject(),状态变成rejected状态

无论成功还是失败都可以通过.then()指定成功和失败的回调函数,catch只能调用失败的回调函数

promise是同步执行,then是异步执行

 
中的同步与异步
同步就是指放在主线程中执行的任务,只有主线程中上一个任务执行完毕才执行下一个同步任务

异步不是在主线程中执行,而是将其放在任务队列中执行,只有等到主线程执行完毕,任务队列中的任务才放入主线程执行

而比较重要的一点是任务队列又分为宏队列和微队列

executor是promise的执行器函数,是同步执行的函数,也就是说promise是同步,而promise的回调函数是异步

6.宏队列和微队列
宏队列:用来保存待执行的宏任务,,比如定时器、DOM回调、ajax回调

微队列:用来保存待执行的微任务,比如:promise的回调/mutationObserver的回调

执行顺序:每次取出宏任务之前要先把微任务全部取出来放到栈里面处理掉,然后再执行宏任务