可以满足需求,且使用方法和Promise.all统一
var a = function() { return new Promise(function(resolve, reject) { setTimeout(function() { console.log(‘a‘) resolve(‘a‘) }, 1000) }) } var b = function(data) { return new Promise(function(resolve, reject) { console.log(‘b‘) resolve(data +‘b‘) }) } var c = function(data) { return new Promise(function(resolve, reject) { setTimeout(function() { console.log(‘c‘) resolve(data +‘c‘) }, 500) }) } // 组织函数队列 function reduce(arr) { var sequence = Promise.resolve() arr.forEach(function(item) { sequence = sequence.then(item) }) return sequence } // 顺序执行函数队列 reduce([a, b, c]) .then(function(data) { console.log(data)// abc }) .catch(function(e) { console.log(e) })