承诺链之间的延迟

时间:2020-02-25 10:33:41

标签: node.js

每个人,我都在尝试允诺(即promise.all)链中的8秒延迟。 但不幸的是,它没有按照我想要的方式执行。 我希望在允诺数组之间延迟8秒,并且我尝试了一些代码。任何人都知道如何放置它或我要去哪里错了吗?

var cron = require('node-cron');
let cron_schedule="* * * * *";
let max_Request = 10,requestProcess = [];
let checkCronJob = () => {
    while (max_Request > 0){
       requestProcess.push(processRequest(produce))
       requestProcess.push(delay(8000));
    }
    return Promise.all(requestProcess).then((result) => {
         console.log(result);
    });
}

var delay = function () {
    var promise = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(true)
        }, 8000);
    });
    return promise;
}
let processRequest = async (produce) => {
     max_Request--;
     return await Promise.resolve(true);
}

checkCronJob();

“ processRequest”将返回一个诺言,此后,我添加了一个8秒的延迟,但实际上它在延迟8秒后一次执行了所有诺言。 我希望这些诺言能够在8秒的延迟内执行。

2 个答案:

答案 0 :(得分:1)

要执行的操作:

var delay = promise => {
    return new Promise((resolve, reject) => {
        promise.then(() => {
            setTimeout(() => {
                resolve(true)
            }, 8000);
        });
    });
}


var recursiveDelay = n => {
    delay(processRequest(produce)).then(() => { if(n > 0)  recursiveDelay(n-1)});
}

recursiveDelay(10);

答案 1 :(得分:0)

立即执行承诺,如果您想确保在开始下一个动作之前有一个延迟,那么您将无法像以前那样设置承诺。

您需要执行以下操作:

while (max_Request > 0) {
  await processRequest(produce);
  await delay(8000);
  max_Request--;
}

如果您不能使用async / await,那就有点难看了

let req;
while (max_Request > 0) {
  if (!req) {
    req = processRequest(produce);
  } else {
    req.then(processRequest(produce));
  }
  req.then(delay(8000));
  max_Request--;
}
return req.then(console.log);