function getAjax1() {
var def = $.Deferred()
setTimeout(function () {
def.resolve("我")
}, 100);
return def
}
function getAjax2(res) {
var def = $.Deferred()
setTimeout(function () {
def.resolve(res+"爱")
}, 100);
return def
}
function getAjax3(res) {
var def = $.Deferred()
setTimeout(function () {
def.resolve(res+"你")
}, 100);
return def
}
function asyncPromise(promiseArr) {
var def = $.Deferred()
if(!promiseArr.length){
throw Error('asyncPromise函数中,你应该传入一个jq Deferred promise数组')
}
return _reduce(promiseArr,function(pre,cur) {
return pre.then(function(res) {
return cur(res)
})
},def.resolve())
}
function _reduce(arr,fn,initValue) {
if (initValue === undefined && !arr.length) {
throw new Error('_reduce of empty array with no initial value');
}
var result = initValue ? initValue : arr[0];
for (var i = initValue ? 0 : 1; i < arr.length; i++) {
result = fn(result, arr[i], i, arr);
}
return result;
}
asyncPromise([getAjax1,getAjax2,getAjax3]).then(function(res) {
console.log("res",res)
})
function Http1(){
return new Promise((resolve,reject)=>{
setTimeout(() => {
resolve("我")
}, 11);
})
}
function Http2(res){
return new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(res+"爱")
}, 11);
})
}
function Http3(res){
return new Promise((resolve,reject)=>{
setTimeout(() => {
resolve(res+"你")
}, 11);
})
}
const asyncPromiseFn = function(...args){
return args.reduce((pre,cur)=>{
return pre.then(res=>cur(res))
},Promise.resolve())
}
asyncPromiseFn(Http1,Http2,Http3).then((res)=>{
console.log("res",res)
}).catch((err)=>{
console.log("err--",err)
})