直接看代码
let p2 = Promise.reject('err'); p2.then(() => { console.log('我永远不会被执行'); return 'abc' }).then((str) => { console.log('我也不会被执行!' + str); }, (err) => { console.log('err1'); }).catch((err) => { console.log('err2'); })在我的记忆中。then可以定义两个参数,第一个为成功执行的函数,第二个为失败执行的函数。这样不就是 当我是reject的时候我还是可以执行then啊。只是执行的是第二个函数。
对失败的处理为止,或者找到catch()为止,期间的成功都不会执行。
如果then中只写成功的回调函数的话,就和老师说的一样了。resolve执行then回调,reject执行catch()回调。如果promise返回失败,then文件中又没有第二个参数,他就会继续向下找,直到找到then中
const serialPromise=arr=>arr.reduce((pre,cur)=>pre.then(cur,reason=>{ console.log('PB的reject来到了这里'); return Promise.resolve(); }),Promise.resolve()) const pA=()=>new Promise((resolve,reject)=>{ console.log(1); resolve(); }) // 因为 pB 的时候 then 就丢掉了 const pB=()=>new Promise((resolve,reject)=>{ console.log(2); reject() }) const pC=()=>new Promise((resolve,reject)=>{ // console.log(3); resolve(); }) serialPromise([pA,pB,pC])因为 pB 的时候 then 就丢掉了