Node.js 承诺链之间的延迟
各位,我一直在尝试在承诺链中延迟8秒,即所有承诺。 但不幸的是,它没有按我希望的方式执行。 我希望在一系列承诺之间有8秒的延迟,我已经尝试了一些代码。有人知道该怎么说,或者我错在哪里吗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
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,因为它们已链接,但您不会将上一个结果传递给下一个。