promise.all() 批量执行promise

js yekong

Promise.all([p1, p2, p3,..]) 用于将多个 Promise 实例,包装成一个新的 Promise 实例。
它接受一个数组作为参数。
数组里命以是 Promise 对象,也可以是别的值,有 Promise 会等待状态改变。
当所有子 Promise 都完成,该 Promise 完成,返回值是全部值的数组
有任何一个失败,该 Promise 失败,返回值是第一个失败的子Promise 的结果。

console.log('go')
Promise.all([1, 2, 3])
    .then(all => {
        console.log('1: ', all)//注意正确写法,console一个字符串一个数组,而不需要+号将二者连城字符串
        return Promise.all([() => {
            console.log('oooo')//这里,因为三个参数都是非promise且非thenable的。all会默认执行promise.resolve将其转为promise状态,且resolved状态。而这个函数也只是数组第零项,如果不调用,里边的console也不会执行
        }, '0000', false]);
    })
    .then(all => {
        console.log('2: ', all)
// 这里原先写错为console.log('2: '+all),
// 最后输出的是
        /* 2: ()=>{
           console.log('oooo')//这里,默认执行promise.resolve时,console是否执行?
         },0000,false */
// 这么一个字符串了
        let p1 = new Promise(resolve => {
            setTimeout(() => {
                resolve('i,am p1');
            }, 1000)
        })
        let p2 = new Promise(resolve => {
            setTimeout(() => {
                resolve('i,m p2')
            }, 2000)
        })
        let p3 = new Promise((resolve, reject) => {
            setTimeout(() => {
                reject('i,m p3')
            }, 3000)
        })
        return Promise.all([p1, p2, p3]);
    })
    .then(all => {
        console.log('end all:' + all)
    })
    .catch(err => {
        console.log('Error: ' + err)
    })

结果

go
1:  [ 1, 2, 3 ]
2:  [ [Function (anonymous)], '0000', false ]
Error: i,m p3

喜欢