在API调用的承诺链中的每个单独调用之间设置延迟

时间:2018-08-14 17:07:45

标签: javascript node.js promise

编辑:我在写这篇文章之前Resolve promises one after another (i.e. in sequence)?看过其他引用的文章,除了找到与异步函数一起尝试的东西外,我没有找到其他答案。现在。但是我相信我的问题是独立存在的。

我正在尝试进行一系列API调用,每次调用之间的延迟很短(例如50毫秒)。 这是我的尝试:

function delay(t, v) {
    return new Promise(function(resolve) {
        setTimeout(resolve.bind(null, v), t)
    });
}
const getCoworker = function getCoworkerInfo(coworkerId)  {
        return apiService.getSingleCoworker(coworkerId);
    }

    const bookingCoworkerCalls = bookingCoworkerIdsUnique.map(coworkerId => {
        return delay(50).then(() => {
            console.log(coworkerId);
            return getCoworker(coworkerId);
        });
    });
    return Promise.all(bookingCoworkerCalls);

根据我的控制台日志,似乎所有这些延迟在开始时就发生一次,然后它们同时都发出呼叫。如何确保这些调用按顺序执行,每个调用之间有延迟,而不是一次执行?理想情况下,延迟对象不会在promise链的下一步中成为结果的一部分,但是在最坏的情况下,我可以将其过滤掉。 谢谢!

0 个答案:

没有答案