для цикла в Coffeescript обещание - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть 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, но я могу видеть только одну законную задержку, когда тест завершен.Я думаю, это как-то связано с обещанием, но я не уверен.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы захотите использовать 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() )

Это даст вам обещание для массива результатов.

0 голосов
/ 19 сентября 2018

Попробуйте:

.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 обещаний), ждет, пока все они решатся, а затем разрешается сам.

...