串行
var p = function(){
return new Promise((resolve,reject)=>{
setTimeout(() => {
console.log('1000');
resolve();
}, 1000);
})
}
var p1 = function(){
return new Promise((resolve,reject)=>{
setTimeout(() => {
console.log('2000');
resolve();
}, 2000);
})
}
var p2 = function(){
return new Promise((resolve,reject)=>{
setTimeout(() => {
console.log('3000');
resolve();
}, 5000);
})
}
p().then(()=>{
return p1();
}).then(()=>{
return p2();
}).then(()=>{
console.log("finish")
})
并行
var promises = function(){
return [1000,2000,3000].map(current =>{
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(current);
resolve()
},current);
})
})
}
Promise.all(promises()).then(()=>{
console.log('end')
})
并发执行限制执行数量,通过函数的递归调用,维护一个count变量
function multiRequest(urls,maxNum){
const len = urls.length;
maxNum = maxNum<len ? maxNum : len;
const result = new Array(len).fill(false);
let count = 0;
return new Promise((resolve,reject)=>{
next();
function next(){
let current = count++;
if(current>=maxNum){
resolve(result);
return;
}
const url = urls[current];
result[current] = url;
if(current<maxNum){
next()
}
}
})
}
var url = [12,34,56,78,90]
multiRequest(url,4).then(res=>{
console.log(res)
})