【发布时间】:2015-08-16 12:29:31
【问题描述】:
有一个函数,需要遍历一个数组,对每一项执行异步操作,最后回调给调用者。
我可以获得 async.forEach 工作的基本情况。 当我这样做时,它会起作用
async.forEach(documentDefinitions(), function (documentDefinition, callback) {
createdList.push(documentDefinition);
callback(); //tell the async iterator we're done
}, function (err) {
console.log('iterating done ' + createdList.length);
callback(createdList); //tell the calling method we're done, and return the created docs.
});
createdList 的长度是正确的。
现在,我想每次通过循环执行另一个异步操作。所以我尝试将代码更改为以下内容;
function insert(link, callback){
var createList = [];
async.each(
documentDefinitions(),
function iterator(item, callback) {
create(collectionLink, item, function (err, created) {
console.log('created');
createdList.push(created);
callback();
});
},
function (err) {
console.log('iterating done ' + createdList.length);
callback(createdList);
}
);
}
create() 是我的新异步操作。 现在我得到了一个无限循环,我们似乎从来没有点击过回调(createdList);
我尝试在异步 create() 方法的回调中移动 callback(),但这些都不起作用。
请帮帮我,我陷入了回调地狱!
【问题讨论】:
-
在
create回调中移动对callback()的调用是执行此操作的方法。不知道为什么这对你不起作用。 -
也不确定。想知道是否是因为回调定义了两次。一次在循环中,再次在包含函数中。不知道它是否变得混乱。
-
顺便说一句。 async.forEach 和 async.each 有什么区别?
-
没有区别;
forEach只是each的别名。您能否更新您的问题以显示您在create回调中使用callback()调用的尝试? -
更新显示完整功能
标签: javascript node.js asynchronous