【问题标题】:await inside for loop and break for loop if condition matched如果条件匹配,则在 for 循环中等待并中断 for 循环
【发布时间】:2019-10-06 21:57:26
【问题描述】:

我有一个数组。我需要迭代数组,直到找不到数据。一旦找到数据,我需要中断 for 循环并返回这些数据。

const arrayData = ['1', '2', '3']

for (let i = 0; i < arrayData.length; i++) {
  data = await getSomeDataFromDB(arrayData[i]) // get data from DB
  if (data.length >= 1) { break } // If found break for loop else iterate again
}
return { items: data }

我已经使用了上面的代码。这是处理这种情况的正确方法还是其他更好的方法?

感谢您的帮助!

【问题讨论】:

  • 看起来不错,虽然我会改用for..of,但弄乱手动索引是丑陋的
  • 谢谢@CertainPerformance 或您的建议
  • 代码看起来不错,是getSomeDataFromDB方法返回promise吗?仅当从 method 返回 promise 时,await 才会起作用。另外,将代码包装在try, catch 中以处理错误
  • @ArUn 是的,这是 dynamoDB 的承诺。感谢您的try...catch 建议。

标签: javascript node.js for-loop async-await aws-lambda


【解决方案1】:

您可以通过从循环中返回来省略隐式全局变量:

for (const entry of arrayData) {
   const items = await getSomeDataFromDB(entry) // get data from DB
   if (items.length >= 1) 
      return { items };
}

【讨论】:

  • 是的,但是我已经添加了部分代码。实际上 for 循环在 if 内。所以,我必须使用 break 来退出 for 循环。
【解决方案2】:

我建议使用for await of

for await...of 语句创建了一个循环遍历 async 可迭代对象以及同步可迭代对象,包括:内置 字符串、数组、类数组对象(例如,参数或 NodeList), TypedArray、Map、Set 和用户定义的异步/同步迭代。它 调用自定义迭代钩子,其中包含要执行的语句 对象的每个不同属性的值。

【讨论】:

  • 让我试试这个。
猜你喜欢
  • 1970-01-01
  • 2014-07-19
  • 2023-01-20
  • 2018-06-09
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多