当前位置: 首页 > Web前端 > JavaScript

PromiseA+规格

时间:2023-03-27 14:20:26 JavaScript

PromiseA+规范Promise一词是一个带有then方法的对象或函数,其行为遵循PromiseA+规范。thenable是一个带有then方法的对象或函数。string/number/boolean/promise...reason是Promise状态失败时的值,即reject的参数,表示拒绝原因异常throw异常规范PromiseStatespromise有三种状态,注意关系它们之间pending1.1初始状态,可以改变1.2promise在被resolved或rejected之前处于这个状态1.3通过resolve->fulfilled1.4通过reject->rejectedfulfilled2.1最终状态,不能改变2.2promise在被resolved之后变成这个状态2.3必须有一个值//undefinedrejected3.1最终状态,不能改变3.2promise在被拒绝后变成这个状态2.3必须有一个原因值//undefinedpending->resolve(value)->fulfilledpending->reject(reason)->rejectedthenpromise应该提出一个then方法来访问最终结果,无论是值还是原因。promsie.resolve(onfulfilled,onrejected);参数要求1.1onfulfilled必须是函数类型,如果不是函数,则忽略1.2onrejected必须是函数类型,如果不是函数,则忽略调用onfulfilled,参数为值2.2之前promise变为fulfilled,不应该调用2.3Onreject只能执行一次edfeature3.1promise变为rejected后要调用onrejected,参数为reason3.2promise变为rejected前不要调用3.3onfulfilledonrejected只能执行一次。微任务queueMicrotask应该实现微任务的callthen方法可以多次调用5.1promise变为fulfilled后,所有onfulfilled的回调应该按照then的顺序执行。在实现promsie时,我们需要一个数组来存储onfulfilledcbpromise.then(cb1).then(cb2).then(cb3)...//或者constpromise=newPromsie();承诺然后(cb1);承诺然后(cb2);//5.2promise变为rejected后,所有的onrejected回调都要按照then的顺序执行实现promsie的时候,我们需要一个数组来存放onrejectedcb的返回值那么返回值就是一个promise,new?老的?promsie2=promise1.then(onfulfilled,onrejected)6.1onfulfilled和onrejected执行结果为x,调用resolvePromise6.2Onfulfilled和onrejected执行异常,需要拒绝promsie26.3如果onfulfilled不是函数,promsie2触发fulfilled值为promise1如果6.4onrejected不是一个函数,promsie2触发rejectedresolvePromiseresolvePromsie(promise2,x,resolve,reject)原因是promise1;7.1如果promise2和x相等,那么rejecttypeError会死循环,为什么???7.2如果x是promise如果x是pending,promise的状态也一定是waiting/pending,知道x已经变成fulfilled/rejected如果x是fulfilled,透传fulfilledpromise宽度相同的值如果x是rejected,rejectpromise宽度相同原因7.3如果x是一个对象或函数letthen=x.then;如果x.then这一步出错,trycatch(e),reject(e)**如果是对象,怎么会出错呢???**如果then是一个函数,则then.call(x,resolvePromsieFn,rejectedPromiseFn);resolvePromsieFn输入参数y,执行resolvePromsie(promise2,y,resolve,reject);如果调用then时抛出异常e,reject原因