【问题标题】:for loop in coffeescript promise咖啡脚本承诺中的 for 循环
【发布时间】:2019-02-23 07:38:13
【问题描述】:

我有一个咖啡脚本,我希望在其中为一个对象添加 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,但测试完成后我只能看到一个合法保留。我猜这与承诺有关,但我不确定。我该怎么做?

【问题讨论】:

  • 我认为您的第一个示例返回一个承诺可能存在问题,而第二个示例返回一个承诺数组。你能显示这个块之后的代码吗?承诺兑现后,您将如何处理法律保留?

标签: javascript for-loop promise coffeescript


【解决方案1】:

您将希望在循环评估为的承诺数组上使用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() )

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

【讨论】:

  • coffeesript 的for ... in ... 是否返回数组?
  • @Roamer-1888 是的,一切都是 CoffeeScript 中的表达式。
  • 多么奇怪。我想人们已经习惯了。
  • @Roamer-1888 我自己并没有使用过 CoffeeScript,但它是一个独特的功能,我想如果你还在使用 CoffeeScript 而不是 ES6+,你会想要使用它。在浏览器对 ES5 map 的支持仍然很低的时代,这可能更为重要。
【解决方案2】:

试试这个:

.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 个承诺),等待所有承诺解决,然后自行解决。

【讨论】:

  • 我多次运行该代码,发现每次都增加了 80 到 90 个合法保留。我尝试移动promises = [],它可以按我的意愿工作。这就是它现在的样子:.then (data) => promises = [] for i in [0 .. 99] promises.push(s3.addLegalHold({ Bucket: bucketName, Key: 'foo', RetentionLegalHoldId: 'holdid' + i }).promise()) return Promise.all(promises)
  • 是的,如果答案在几个小时左右没有被编辑,那么我会自己做。
  • @Roamer-1888 感谢您的警告。我会让你免于等待——如果你能改进它,只需编辑! :-)
  • 嗨,Fabian,完成。就像 runnerpaul 已经指出的 promises = [] 的相同动作。
猜你喜欢
  • 2012-06-14
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
相关资源
最近更新 更多