這是該方案: 使用AWS室壁運動> 要想從室壁運動記錄,我需要一個碎片迭代,直到 請求完成> 室壁運動將不會返回一個新片段的迭代器> 呼叫到「getRecords」是異步> 嘗試來迭代該過程失敗,因爲需要碎片迭代之前請求並沒有解決的JavaScript:順序迭代承諾功能
const getRecordsInShard = (shard, batchSize, streamName) => {
const records = [];
const loop = (response) => {
if (_.isEmpty(response.NextShardIterator)) {
return Promise.resolve(records);
}
records.push(response.Records);
return getRecordsByShardIterator(response.NextShardIterator, batchSize).then(loop);
};
return getStreamIterator(shard.ShardId, shard.SequenceNumberRange.StartingSequenceNumber, (streamName || process.env.KINESIS_STREAM))
.then(response => getRecordsByShardIterator(response.ShardIterator, batchSize))
.then(loop);
};
因爲許從返回上面的代碼失敗在超級函數返回之前未解析。我如何依次迭代一個promise函數,使用前一次迭代的返回值作爲下一個輸入?
注意事項: 每次迭代依賴於先前返回的信息,結果需要從每一次迭代中收集的記錄完全
[This thread](https://stackoverflow.com/questions/24586110/resolve-promises-one-after-another-i-e-in-sequence)可能是你需要的。 – saille
「*在超級函數返回之前未解析」是什麼意思?它如何完全失敗? – Bergi
可能重複[解決承諾一個接一個(即按順序)?](https://stackoverflow.com/questions/24586110/resolve-promises-one-after-another-ie-in-sequence) – alexmac