私はajax呼び出しを行い、結果を使って約束を解決する関数を持っています。残念ながら、APIは結果を100に制限し、オフセットパラメータを使用して次の100を取得する必要があります。約束を解決する前に、必要なすべてのajax呼び出しを行うにはどうしたらいいですか(API応答は合計値を提供するので、呼び出し回数を決定できます)約束を解決する前に複数のajax呼び出しを実行する
let currentOffset = 0;
let totalCount;
let offsetCount;
const makeCall = function(camp) {
return new Promise(function(resolve, reject) {
api.get(camp, currentOffset, e => {
totalCount = e.totalCount;
offsetCount = Math.floor(totalCount/100)
let payload = e.payload;
for (var a in payload) {
myArray.push({
'id': payload[a].id,
'text': payload[a].text,
'url': ads[a].url,
});
}
resolve();
});
});
};
'makeCall'を複数回呼び出すことから複数の約束をしてから、' Promise.all'を使って、すべてが完了したときに解決する別の約束を作ります。論理を自分で書いてはいけません。 – Bergi
'payload'が配列であると仮定し、' for ... in'列挙体を使わないでください(https://stackoverflow.com/q/500504/1048572)! – Bergi
返されるアイテムの数が正確にわからず、返されたアイテムの数に基づいて決定する必要があると思われますか? さらに多くの結果が予想される場合は、最初の約束の範囲内で新しいPromiseを作成することができます。 (これは、あなたが作成したすべての約束事が、まだ項目がある場合に後続のものを作ることができるように、関数にすることができます)。 欠点は、次のように処理が完了するまで待つ必要があるため、遅くなる可能性があるということです。 –