Javascript 为什么我的for await循环在异步迭代器中无限循环?
我正在使用s3 aws sdk获取多个文件中的多条记录。s3.selectObjectContent调用返回一个读取流。我使用.map返回这些读取流的列表,然后等待对该列表的所有承诺,以获得可读流的列表。然后,我尝试在所有流中进行for wait循环,以获取块并作为一个块列表返回,以便生成一个包含所有事件/块的读取流 现在,这个for await在.map内部工作,但是一旦我在map返回后在外部执行它,它就会无限循环Javascript 为什么我的for await循环在异步迭代器中无限循环?,javascript,node.js,aws-sdk-js,node-streams,Javascript,Node.js,Aws Sdk Js,Node Streams,我正在使用s3 aws sdk获取多个文件中的多条记录。s3.selectObjectContent调用返回一个读取流。我使用.map返回这些读取流的列表,然后等待对该列表的所有承诺,以获得可读流的列表。然后,我尝试在所有流中进行for wait循环,以获取块并作为一个块列表返回,以便生成一个包含所有事件/块的读取流 现在,这个for await在.map内部工作,但是一旦我在map返回后在外部执行它,它就会无限循环 async function* concatenateStreamsOrder
async function* concatenateStreamsOrdered(streams) {
for (const stream of streams) {
for await (const chunk of stream) {
yield chunk
}
}
}
async function getS3SelectObjectsStreams(bucket, sourceKeys, expression) {
let readStreamPromises =
sourceKeys.map(
async sourceKey => {
let selectParameters = {
Bucket: bucket,
Key: sourceKey,
Expression: expression,
ExpressionType: 'SQL',
InputSerialization: {
JSON: {
Type: 'DOCUMENT'
}
},
OutputSerialization: {
JSON: {
RecordDelimiter: ','
}
}
};
let result = await s3.selectObjectContent(selectParameters).promise();
// for await (const event of result.Payload) {}
return result.Payload;
}
);
let readStreams = await Promise.all(readStreamPromises);
const iterableStreams = await concatenateStreamsOrdered(readStreams);
return stream.Readable.from(iterableStreams);
}
因此,当我取消对上面评论的for wait的注释时,它可以立即响应,没有问题。当我这样注释它时,concatenateStreamsOrdered函数循环中的for将永远等待
读取流(result.Payload)是否以某种方式分离?如何让它在concatenateStreamsOrdered函数而不是map函数中工作