js阻塞式执行异步函数或请求
阻塞式执行异步函数或请求,就是说按照先后顺序排队执行一系列请求
方案一 Promise
/**
* 同步执行多个Promise
*/
function syncRunPromise(promiseList) {
let current = Promise.resolve();
let dataList = [];
for (let i = 0; i < promiseList.length; i ++) {
const promise = promiseList[i];
current = current.then(promise).then(data => {
dataList[i] = data;
return dataList;
});
}
return current;
}
/**
* 递归方式实现同步执行多个Promise
*/
function syncRunPromiseRecursion(promiseList) {
let dataList = [];
return runPromise(promiseList);
function runPromise(list, i = 0) {
const promise = list[i];
if (!promise) {
return Promise.resolve(dataList);
}
return promise().then((data) => {
dataList[i] = data;
return runPromise(list, i + 1);
})
}
}
// 使用举例
const urlList = ['/getData1', '/getData2', '/getData3'];
const promiseList = urlList.map(url => {
return () => new Promise((resolve) => {
console.log('request start:', url);
setTimeout(() => {
console.log('request end:', url);
resolve('response of ' + url);
}, 1000);
});
});
syncRunPromise(promiseList).then(res => console.log(res));
// syncRunPromise(promiseList).then(res => console.log(res));