Promise.all 接受由多个 promise 组成的数组作为参数
    当数组中所有的 promise 都 resolve 时,返回这些 promise 结果组成的数组
    当任意一个 promise reject 时,则终止执行,抛出错误

    1. Promise.all2 = (promiseList) => {
    2. return new Promise((resolve, reject) => {
    3. let result = []
    4. let length = promiseList.length
    5. let count = 0
    6. promiseList.forEach((promise, index) => {
    7. promise.then(data => {
    8. result[index] = data
    9. count += 1
    10. if(count === length -1) {
    11. resolve(result)
    12. }
    13. }, (reason) => reject(reason))
    14. })
    15. })
    16. }
    17. Promise.all2([Promise.resolve(1), Promise.resolve('foo'), Promise.resolve(3)])
    18. .then(data => console.log(data), reason => console.error(reason))
    19. // [1, 'foo', 3]
    20. Promise.all2([Promise.resolve(1), Promise.reject('foo'), Promise.resolve(3)])
    21. .then(data => console.log(data), reason => console.error(reason))
    22. // error foo