私は約束事の問題を抱えています。私は処理してmongoデータベースに取り込む必要があるデータを返す外部APIを呼び出します。私はエクスプレスでnodejsとmongodbを使用しています。とにかく、APIへの呼び出しが正常に動作している、問題は私が一度にそれらのトンを作っているということです。私はそれらを遅くしたい、一組のすべての呼び出しをするように。ちょっと待って。次のセットのすべての呼び出しを行います。これが既知の量のセットだったら、私はそれらを連鎖することを約束します。どれくらいのセットがあるかわからないので、私はそれらをループしています。私は閉鎖が問題だと思うが、それを回避することはできない。上の例のコードに!nodejsの約束事の配列に遅延やスリープを追加する
function readApi(carFactory){
var promise = new Promise(function(resolve, reject) {
// call out to api, get set of car data from factory1
console.log(carFactory);
if (true) {
console.log('resolved');
resolve("Stuff worked!"+carFactory);
}
else {
reject(Error("It broke"));
}
});
return promise;
}
function manager(){
//singular call
readApi("this is a singular test").then(returnedThing=>{
console.log(returnedThing); //Stuff worked! this is a singular test
});
let dynamicList = ["carFactory1", "carFactory2","carFactory3","carFactory..N"];
let readApiAction = [];
dynamicList.forEach(carIter=>{
readApiAction.push(readApi(carIter));
});
//ok so now I got an array of promise objects.
//I want to call the first one, wait 1 minute and then call the next one.
//originally I was calling promise.all, but there is no way to get at
//each promise to pause them out so this code is what I am looking to fix
let results= Promise.all(readApiAction);
results.then(data=>{
data.forEach(resolvedData=>{
console.log(resolvedData); //Stuff worked carFactory1, etc...
});
});
//singular call with timeout, this does not work, each one called at the same time
let readApiActionTimeouts = [];
dynamicList.forEach(carIter=>{
setTimeout(callingTimeout(carIter), 6000);
});
}
//just a function to call the promise in a timeout
//this fails with this - TypeError: "callback" argument must be a function
function callingTimeout(carIter){
readApi(carIter).then(returnedThing=>{
console.log("timeout version"+returnedThing);
});
}
です。 – jfriend00
関連の回答:[)(Promise.allの各約束を遅らせる](https://stackoverflow.com/questions/47383610/nodejs-delay-each-promise-within-promise-all/47394678#47394678)、[どのように制御します一度に飛行中の多くのリクエスト](https://stackoverflow.com/questions/47299174/nodejs-async-request-with-a-list-of-url/47299802#47299802)、[できるようにする方法javascriptで一度に10の約束を実行して、api呼び出しのレート制限を防止しますか?](https://stackoverflow.com/questions/44666202/how-to-make-it-so-that-i-canecute-say -10-promises-at-a-time-in-javascript-to/44666278#44666278)。 – jfriend00
以上の関連回答:[バッハ処理のための適切な方法を選択し(https://stackoverflow.com/questions/36730745/choose-proper-async-method-for-batch-processing/36736593#36736593)、[における約束間の遅延約束チェーン](https://stackoverflow.com/questions/41079410/delays-between-promises-in-promise-chain/41079572#41079572)、[遅延が約束をチェーン](https://stackoverflow.com/questions/38734106/delay-chained-promise/38734304#38734304)。 – jfriend00