以数组保存promise队列,通过数组的reduce方法一次执行,将上一个promise的返回值传递给下一个promise。
let compose = function (...args) {
const init = args.shift();
return function (...arg) {
return args.reduce(function (sequence, func) {
return sequence.then(function (result) {
return func.call(null, result);
});
}, Promise.resolve(init.apply(null, arg)));
};
};