liubin/promises-book

Promise.all 是在所有promise对象都变为resolve或者只要有一个变为reject时,才会去调用`.then` !

Opened this issue · 1 comments

原文:
Promise.all 接收一个 promise对象的数组作为参数,当这个数组里的所有promise对象全部变为resolve或reject状态的时候,它才会去调用 .then 方法。

而实际上应该是:
Promise.all 是在所有promise对象都变为resolve或者只要有一个变为reject时,才会去调用.then

先抛出警告:2,再输出:p3
    var p1 = Promise.resolve(1);
    var p2 = Promise.reject(2);
    var p3 = new Promise(function(resolve, reject) {
        setTimeout(function() {
            console.log('p3')
            resolve(3);
        }, 500);
    });

    p3.then(function(res) {
        console.log('p3')
    });

    Promise.all([p1, p2, p3]).then(function(res) {
        console.log(res)
    }, function(err) {
        console.warn(err)
    });

说白了就是亦或的关系,有且只有一个为假,则全部为假。不管是假是真都会调用.all这个对象的then就会被调用