Javascript 为什么我的for await循环在异步迭代器中无限循环?

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

我正在使用s3 aws sdk获取多个文件中的多条记录。s3.selectObjectContent调用返回一个读取流。我使用.map返回这些读取流的列表,然后等待对该列表的所有承诺,以获得可读流的列表。然后,我尝试在所有流中进行for wait循环,以获取块并作为一个块列表返回,以便生成一个包含所有事件/块的读取流

现在,这个for await在.map内部工作,但是一旦我在map返回后在外部执行它,它就会无限循环

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函数中工作