Promise.all().then()仍然使输出同步的原因是因为Promise.all()方法返回的是一个新的Promise对象,该Promise对象会在所有传入的Promise对象都变为resolved状态后才会变为resolved状态。而.then()方法是在Promise对象变为resolved状态后执行的回调函数,因此.then()方法中的代码会在所有传入的Promise对象都变为resolved状态后才会执行。
具体来说,Promise.all()方法接收一个由多个Promise对象组成的数组作为参数,并返回一个新的Promise对象。这个新的Promise对象会在数组中的所有Promise对象都变为resolved状态后才会变为resolved状态,或者在数组中的任何一个Promise对象变为rejected状态后立即变为rejected状态。
当Promise.all()方法返回的新的Promise对象变为resolved状态后,.then()方法中的回调函数会被添加到微任务队列中,等待执行。由于微任务队列中的任务会在当前任务执行完毕后立即执行,因此.then()方法中的回调函数会在当前任务执行完毕后立即执行,即使.then()方法在代码中的位置在Promise.all()方法之后。
总结起来,Promise.all().then()仍然使输出同步是因为Promise.all()方法返回的新的Promise对象会在所有传入的Promise对象都变为resolved状态后才会变为resolved状态,而.then()方法中的回调函数会在新的Promise对象变为resolved状态后立即执行。
领取专属 10元无门槛券
手把手带您无忧上云