把梦留给海

文章 评论 浏览 29

把梦留给海! 2022-05-04 13:54:20
function request(url) {
    const timeOut = Math.random() * 10;
    const result = url +': ' + timeOut + 's';
    return new Promise((res, rej) => {
        try {
            setTimeout(() => {
                // console.log(url, result);
                res(result);
            }, timeOut * 1000);
        } catch (error) {

            console.error(url, error);
            rej(error);
        }
    });
}
function multiRequest(urls, maxNum = 3) {
    let requestedIndex = 0;
    let currentReqestting = 0;
    const results = {};

    function pushRequest(url, callback) {
        if (requestedIndex >= urls.length || currentReqestting >= maxNum) {
            return;
        }
        request(url)
        .then((res) => {
            results[url] = res;

            currentReqestting--;
            if (Object.keys(results).length >= urls.length) {
                callback();
            }
            pushRequest(urls[requestedIndex], callback);
        })
        .catch(e => {
            results[url] = e;

            currentReqestting--;
            if (Object.keys(results).length >= urls.length) {
                callback();
            }
            pushRequest(urls[requestedIndex], callback);
        });
        currentReqestting++;
        requestedIndex++;
        pushRequest(urls[requestedIndex], callback);
    }

    return new Promise((res, rej) => {
        try {
            if(requestedIndex < urls.length && currentReqestting < maxNum){
                pushRequest(urls[requestedIndex],() => {
                    res({
                        urls,
                        results
                    });
                });
            }
        } catch (error) {
            rej({
                urls,
                error
            });
        }
    });
}

multiRequest(['/sale_center/sale_order/', '/sale_center/klicen_order/', '/sale_center/terminal_order/', '/sale_center/xyt_order/', '/sale_center/patch_order/'])
.then(({ urls, results }) => {
    console.log('------------------------------');
    console.log(results);
    urls.forEach(url => {
        console.log(results[url]);
    });
});

第 153 题:实现一个批量请求函数 multiRequest(urls, maxNum)

把梦留给海! 2022-05-04 13:48:38

请问

console.log("" == [null])

为什么是true啊???

换句话说,为什么

ToPrimitive([null])

结果是"" ?????

JavaScript 深入之类型转换(下)

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文