вам нужно передать в качестве аргумента текущее значение index
, поэтому вам нужно умножить этот индекс на текущую задержку вызова API, поэтому, когда это первый шаг, он будет (index = 0), поэтому вы должны сделатьэто что-то вроде (index + 1) * apiDelay
, тогда это будет 5000, второй шаг, индекс будет 1, тогда (index + 1) * apiDelay
будет 10000, и последний шаг index
будет 2, тогда (index + 1) * apiDelay
будет 15000.
Внизу были внесены некоторые изменения в ваш текущий код.
var dataset = [10, 20, 30];
var delay = 100;
var apiDelay = 5000;
function execute(dataset) {
var i = 0;
scannedJob(dataset, i);
}
//1ST TIME OUT METHOD//
function scannedJob(dataset, i) {
setTimeout(function() {
console.log("Scanned Job Number ="+dataset[i]+" @ time = " + new Date().toLocaleTimeString());
fireJobSearchHttpAPI1(dataset[i], i);
i++;
if (dataset.length > i) {
self.scannedJob(dataset, i);
} else {
i = 0;
}
}, delay);
}
//2nd TIME OUT METHOD//
/* TWO TYPES OF METHODS I WRITTEN , BOTH ARE NOT WORKING,
EXPECTED: Each API call should fire with 5sec delay. Instead all 3 api calls given response after 5 seconds. I need each call should take 5sec and total at the end it should take 15 seconds.,
BUT FIRING ALL THE JOB NUMBERS IMMEDIATELY WITHOUT DELAY
*/
function fireJobSearchHttpAPI1(jobNum, index) {
console.log("index", ((index + 1) * apiDelay))
setTimeout(function() {
console.log("job number '"+jobNum+"' API FIRED @ " + new Date().toLocaleTimeString());
}, ((index + 1) * apiDelay));
}
function fireJobSearchHttpAPI2(jobNum) {
(function myLoop(i) {
setTimeout(function() {
console.log("job number '"+jobNum+"' API FIRED @ " + new Date().toLocaleTimeString());
if (--i) myLoop(i);
}, apiDelay)
})(1);
}
//Main Method
execute(dataset);