Promise 是 ES6 语法标准里的新定义, 一般用来处理异步方法的同步执行. 本文主要介绍 Promise all 的用法和实现.
加入有以下场景: 我有 5 个异步方法, 需要等到这 5 个方法执行结束之后再执行下一步, 如果其中有一个出错, 则进入到 catch 方法里. 具体实现如下:
- function promiseAll(arr){
- return new Promise((resolve, reject) => {
- const result = [];
- let i = 0;
- function next(promise){
- if( i> arr.length - 1){
- return resolve(result);
- }
- promise().then(res => {
- const end = new Date().valueOf();
- const diff = end - start;
- console.log(i, diff)
- result.push(res);
- next(arr[++i]);
- }).catch(err => {
- return resolve(err);
- })
- }
- next(arr[i]);
- });
- };
- const promiseList = [1,2,3,4,5].map(one => {
- return () => {
- return new Promise((resolve, reject) => {
- setTimeout(() => {
- resolve(one);
- }, 1000);
- })
- }
- });
- const start = new Date().valueOf();
- promiseAll(promiseList).then(res => {
- const end = new Date().valueOf();
- console.log(res, end - start)
- });
- // [1, 2, 3, 4, 5] 15000
来源: http://www.jianshu.com/p/248e6f8817a6