【问题标题】:calling function inside for loop javascript在for循环javascript中调用函数
【发布时间】:2018-04-27 15:04:35
【问题描述】:

好的,这是我的循环:

if (list.length) {
        for (let i = 0; i < list.length; i++) {
            let fruit = list[i].attributes;
            if (fruit.color === 'red') {
                id = fruit.id;
                fruit.path = base.fruit_directory + "/" + id;
                saveFruit(id);
            }
        }
}

现在,每当出现 === 红色的水果时。保存水果不会自动执行。但是在所有其他事情发生之后,这是为什么呢?

有什么解决方法吗?

【问题讨论】:

  • saveFruit 是同步函数吗?
  • 您正在使用 let i 并使用 j 来检查长度和递增 j ,
  • saveFruit 方法是异步的吗?如果是,那么这就是原因。如果您希望它在迭代下一个“水果”之前完成,您可以让它返回一个承诺,或者让它同步。此外,您的循环初始化使用j 而不是i。你从未初始化变量j。此外,您的循环正在迭代 i,但 i 永远不会递增。所以,你只检查水果数组的第一个元素
  • 您的代码不完整且无效。发布一个真实的演示。
  • @EvanBechtol 我如何使它同步?

标签: javascript function loops


【解决方案1】:

假设 saveFruit 返回一个承诺(如果它不发布该函数):

Promise.all(
  list.map(item=>item.attributes)//map list items to fruit
  .filter(fruit=>fruit.color==="red")//only red fruit
  .map(f=>saveFruit(base.fruit_directory +"/"+f.id))//map fruit to promise resolving in response
).then(
  responses=>console.log("got responses:",responses)
)

【讨论】:

  • 不应该是fruit.pathf.path
  • @EvanBechtol 不,应该是base.fruit_directory 我改了
猜你喜欢
  • 1970-01-01
  • 2021-11-20
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多