Node.js使用async.forEach与异步操作
Node.js using async.forEach with async operation
有一个函数,它需要遍历数组,对每一项执行异步操作,然后最后回调给调用者。
我可以得到async的基本情况。每个人都去工作。当我这样做的时候,它可以工作
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);
我尝试将callback()移动到async create()方法的回调中,但这两种方法都不起作用。
请帮帮我,我被困在回调的地狱里了!将函数更改为以下内容修复了此问题。
function insert(link, callback){
var createdList = [];
async.each(
documentDefinitions(),
function iterator(item, cb) {
create(collectionLink, item, function (err, created) {
console.log('created');
createdList.push(created);
cb();
});
},
function (err) {
console.log('iterating done ' + createdList.length);
callback(createdList);
}
);
}
不确定,但我认为是将callback的一次出现更改为cb才成功的。
这是一个范围问题,他们感到困惑吗?
相关文章:
- 如何指示“;熟度;在异步操作中
- 使用jquery更改异步操作中的文本值
- 节点.js中的嵌套异步操作
- 阻止chrome.webRequest.onBeforeSendHeaders侦听器中的异步操作
- 节点.js和表达式:如何在异步操作后返回响应
- 无法在Redux中测试异步操作
- 当我在异步操作Redux上开始单元测试时,没有定义错误承诺
- 循环中的异步操作
- 回流如何侦听异步操作已完成
- 我们可以使用Jasmine在测试中执行异步操作吗
- 异步执行 forEach,就像瀑布一样
- jQuery:如何检查以确保所有异步操作都已完成
- JavaScript ES6 承诺在 while 循环中调用异步操作
- 请等待异步操作 (firebase) 调用完成,然后再加载网页
- 具有 Javascript 同步接口的异步操作
- 如何在异步操作期间使 Express.js 日志错误
- 如何在 $ 中执行异步操作.延迟,然后失败过滤回调并传递回成功链
- Redux 中的异步操作
- Redux - 智能组件 - 在挂载组件之前如何处理异步操作
- Node.js使用async.forEach与异步操作