Node.js 承诺链之间的延迟

Node.js 承诺链之间的延迟,node.js,Node.js,各位,我一直在尝试在承诺链中延迟8秒,即所有承诺。 但不幸的是,它没有按我希望的方式执行。 我希望在一系列承诺之间有8秒的延迟,我已经尝试了一些代码。有人知道该怎么说,或者我错在哪里吗 var cron = require('node-cron'); let cron_schedule="* * * * *"; let max_Request = 10,requestProcess = []; let checkCronJob = () => { while (max_Reques

各位,我一直在尝试在承诺链中延迟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秒的延迟内执行。

对于您想要做的事情:

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);
承诺会立即执行,如果您希望在开始下一个操作之前确保延迟,那么您不能像现在这样设置承诺

您需要执行以下操作:

while (max_Request > 0) {
  await processRequest(produce);
  await delay(8000);
  max_Request--;
}
如果您不能使用
异步
/
等待
,那么它会稍微难看一些

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

我在Alexandre Senges添加了这一行no@SwetaSharma错误信息是什么?问题可能不在你的代码片段中,没有错误,只是承诺之间没有延迟。它是一次性履行承诺,然后延迟8秒,但我想在每次承诺履行之间。你的问题不清楚,我更新我的答案,过几天再查minutes@SwetaSharma是的,所以在
async
.getMaxRequest(product)中调用此代码的函数,然后(result=>{console.log(“for result”);console.log(result);});让getMaxRequest=async(product)=>{while(max_Request>0){wait processRequest(product);wait delay(8000);}@SwetaSharma我也添加了一个非
async
/
wait
版本。@SwetaSharma制作
checkCronJob
async
,然后您可以在我的第一个示例中使用该代码。在所有承诺结束时是否会得到一个结果?您似乎注销了一些东西,但我看不到您的代码中会产生任何东西ng,因为它们已链接,但您不会将上一个结果传递给下一个。