每个人,我都在尝试允诺(即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秒的延迟内执行。
答案 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);