在 coffeescript promise 中循环

for loop in coffeescript promise

我有一个 coffeescript,我希望为一个对象添加 100 个合法保留。

要添加一个,我执行以下操作:

  .then (data) =>
      s3.addLegalHold({
        Bucket: bucketName,
        Key: 'foo',
        RetentionLegalHoldId: 'holdid'
      }).promise()

要加 100,我尝试了这个,但它不起作用:

  .then (data) =>
    for i in [0 .. 99]
      console.log('count: ' + i)
      s3.addLegalHold({
        Bucket: bucketName,
        Key: 'foo',
        RetentionLegalHoldId: 'holdid' + i
      }).promise()

我的 console.log('count: ' + i) 上升到 99,但在测试完成后我只能看到一个合法保留。我想这与承诺有关,但我不确定。我该怎么做?

试试这个:

.then (data) =>
  promises = []
  for i in [0 .. 99]
    promises.push(s3.addLegalHold({
      Bucket: bucketName,
      Key: 'foo',
      RetentionLegalHoldId: 'holdid' + i
    }).promise())
  return Promise.all(promises)

关键区别在于Promise.all (MDN)。它需要一系列承诺(在你的例子中,100 个承诺),等待所有承诺解决,然后自行解决。

您将希望在您的循环评估为的承诺数组上使用 Promise.all

  .then (data) =>
    Promise.all( for i in [0 ... 100]
      console.log ('count: ' + i)
      s3.addLegalHold {
        Bucket: bucketName,
        Key: 'foo',
        RetentionLegalHoldId: 'holdid' + i
      }
      .promise() )

这将为您提供一组结果的承诺。