当前位置: 首页 > 科技观察

这10个片段将帮助你理解ES中的Promise

时间:2023-03-19 22:21:31 科技观察

在开发过程中,了解JavaScript和Promise的基础知识将有助于提高我们的编码技能。今天,我们就来看看以下10个片段。相信它通过这10个片段将帮助我们理解Promise。片段一:同步执行Promise,异步执行promise.then。片段2:一个promise有三种不同的状态:pendingfulfilledrejected一旦状态被更新,pending->fulfilled或pending->rejected,它可以再次改变。prom1与prom2不同,两者都返回新的Promise状态。Fragment3即使reject后有resolve调用,也只能执行resolve或reject中的一个,其余的不会执行。片段4:Promise可以链接。当涉及到链式调用时,我们通常会考虑返回this,但Promises不会。每次promise调用.then或.catch时,默认返回一个新的promise,从而链接调用。片段5:promise的.then或.catch可以调用多次,但这里的Promise构造函数只执行一次。换句话说,一旦promise的内部状态发生变化并获得一个值,随后对.then或.catch的每次调用都将直接获得该值。片段6.Then或.catch的返回值不能是promise本身,否则会死循环。Snippet7:在.then或.catch中返回错误对象不会抛出错误,因此后续的.catch不会捕获错误对象,需要改为以下之一:returnPromise.reject(newError('error'))thrownewError('error')因为返回任何非promise值都会被包装成一个Promise对象,即返回newError('error')等同于返回Promise.resolve(newError('error'))。Fragment8:Promise.resolve(1).then(2).then(Promise.resolve(3)).then(console.log)//1.thenor.catch应该是一个函数,传递一个非函数will产生一个值的结果将被忽略,例如.then(2)或.then(Promise.resolve(3)。片段9:.then可以接受两个参数,第一个是处理成功的函数,第二个处理错误.catch函数是写.then第二个参数的一种方便的方法,但是使用时有一点需要注意:.then的第二个错误处理函数无法捕捉到第一个success抛出的错误function和后续函数..catch捕获之前的错误。当然,如果你想重写,下面的代码可以工作:Fragment10:process.nextTick和promise.then都属于microtasks,而setImmediate属于macrotasks,它们是在事件循环的检查阶段执行。微任务在事件循环的每个阶段(宏任务)之间执行,并在事件循环的开始。