当 for/in 循环完成所有迭代时发送信号

sending signal on when for/in loop has completed all iterations

我有一个对象数组,我正在使用 for/in 循环来处理成 key/value 对,在它工作时将每个对象写入数据库。

我的应用程序设计为在更新数据库时发送推送通知,这按预期工作,但是当循环中有多个项目时,它会为每个对象发送通知(预期,但不是这样)预期)

我的简单循环代码是:

for(var idx in multiSelectSaveArr) {
            calendarPage.saveCalendarMultiItem(time = multiSelectSaveArr[idx].creationDate, multiSelectSaveArr[idx])

        }

这样做的目的是 time 将成为唯一键,而值是 JSON 对象。

我的 calendarPage.saveCalendarMultiItem 是我的数据模型的信号,这是存储数据的函数所在的位置,因此每次迭代都会调用一个函数,该函数将数据库写入作为一个单独的对象处理

我的循环的性质是,有时它可能包含 3 个对象,其他时候可能包含 30 个 - 每次都是不同的数字。

我的问题是

有没有一种方法可以发出循环结束的信号,这意味着一旦迭代了最终对象,然后只发送一个通知?

感谢您的帮助!

您可以使用 Array.prototype.forEach 来检查索引并在迭代期间获取数组值,一旦 idx 在最后但您调用通知函数的一个索引表示迭代结束:

multiSelectSaveArr.forEach(function(val, idx){
   calendarPage.saveCalendarMultiItem(time = val.creationDate, val);
   if(idx === multiSelectSaveArr.length - 1) notificationCallback();
}

你也可以使用 Array.prototype.entriesfor..of 循环来完成它,它是为像数组一样的 iterable 迭代而设计的:

for(const [idx, val] of multiSelectSaveArr.entries()){
   calendarPage.saveCalendarMultiItem(time = val.creationDate, val);
   if(idx === multiSelectSaveArr.length - 1) notificationCallback();
}

我在循环内调用 notificationCallback() 以及 if 条件的原因是因为我假设 如果该数组是 ,如果我在循环之后放置回调调用,它无论如何都会工作,而且它不需要 if,但仍然会调用notificationCallback() 虽然循环从不 运行.

不要使用 for..in 循环遍历数组,因为它以未指定的顺序遍历对象(在本例中为数组对象)的 属性 值。 有关详细信息,请参阅此 answer