js阻塞式执行异步函数或请求

857 阅读1分钟

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));