问题1:为何p1和p2为什么都是打印1楼上的大佬已经给出了原因, 至于问题2:p1和p2都在runPromiseInSequence之前执行;这是由于同步代码、异步代码的微任务队列先后执行顺序;arr.reduce同步代码的执行相当于执行Promise.resolve(10).then(p1).then(p2).then(f3).then(p4); 而promise.then的程序会被加入微任务队列中执行,所以会和下面的Promise.resolve(1).then(2).then(console.log); Promise.reject(1).then(2, 2).then(console.log, console.log); 中的.then程序交替进入微任务队列执行。同时其中return new Promise((resolve,reject)=>{resolve()})还会带来另一个问题,可以参考这位大佬的回复 