1

這是該方案: 使用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函數,使用前一次迭代的返回值作爲下一個輸入?

注意事項: 每次迭代依賴於先前返回的信息,結果需要從每一次迭代中收集的記錄完全

+1

[This thread](https://stackoverflow.com/questions/24586110/resolve-promises-one-after-another-i-e-in-sequence)可能是你需要的。 – saille

+0

「*在超級函數返回之前未解析」是什麼意思?它如何完全失敗? – Bergi

+0

可能重複[解決承諾一個接一個(即按順序)?](https://stackoverflow.com/questions/24586110/resolve-promises-one-after-another-ie-in-sequence) – alexmac

回答