与this question中的OP一样,我想做一个for
循环,并在所有操作完成后执行某些操作。
我检查了答案,async库,但所有解决方案涉及迭代数组。我不想做一个数组的“forEach”元素,我没有数组。
如果我只想做n
次手术怎么办?例如,假设我想在我的数据库中插入n
个随机条目,然后做些什么?现在我遇到了类似的问题:
function insertMultipleRandomEntries(n_entries,callback){
var sync_i=0;
for(var i=0;i<n_entries;i++){
insertRandomEntry(function(){
if(sync_i==(max-1)){
thingDoneAtTheEnd();
callback(); //watched by another function, do my stuff there
}
else{
sync_i++;
console.log(sync_i+" entries done successfully");
thingDoneEachTime();
}
});
}
}
这绝对是可怕的。在异步中我找不到任何简单的东西,你会怎么做?
答案 0 :(得分:2)
您可以使用Promises,自4.0版以来在node.js中没有库支持。
如果insertRandomEntry
的回调函数有参数,您可以将其传递给resolve
。在给then
的函数中,您会收到一个给resolve
的参数数组。
function insertMultipleRandomEntries(n_entries,callback){
var promises = [];
for(var i=0;i<n_entries;i++) {
promises.push(new Promise(function (resolve, reject) {
insertRandomEntry(function (val) {
thingDoneEachTime(val);
resolve(val);
});
}));
}
Promise.all(promises).then(function (vals) {
// vals is an array of values given to individual resolve calls
thingDoneAtTheEnd();
callback();
});
}