async.map没有't使用嵌套瀑布调用cb
async.map doesn't call cb with a nested waterfall
我在异步方面遇到了一些问题。
这是我的代码:
Main.prototype._onlyGeoLinks = function() {
var redis = RedisClient.client
, getKeys = function(key, cb) {
redis.keys(key, cb);
}
, count = 0
//
cb = null;
async.waterfall([
function(cb) {
async.concat([
'events:*'
, 'news:*:*:*:*'
, 'deals:*'
], getKeys, cb);
},
function(keys, cb) {
// iterate keys
async.map(keys, function(key, cb) {
async.waterfall([
function(cb) {
redis.get(key, cb);
}, function(item, cb) {
log.verbose(LOG_CTX, 'Parsing item.. %d', ++count);
GeoHelper.parse(item, cb); // This are calling cb(new Error('bla'))
}
], cb) // at this point, I can read err
}, cb) // This is never called
}
], function(err, items) {
if (err) {
log.error(LOG_CTX, err);
} else {
log.verbose(LOG_CTX, items);
log.verbose(LOG_CTX, items.length);
}
})
}
我尝试过的
async.map(keys, function(key, cb) {
async.waterfall([
function(cb) {
redis.get(key, cb);
}, function(item, cb) {
log.verbose(LOG_CTX, 'Parsing item.. %d', ++count);
GeoHelper.parse(item, cb);
}
], function(err) {
log.error('1', err); // This prints ERR
cb(err);
})
}, function(err) {
log.error('2', err); // this is never called
cb(err);
})
我错过了什么?谢谢你的帮助。
我发现,如果迭代器在映射过程中调用cb时出错,则会调用主cb,但映射会继续。这就是为什么我没有看到错误,输出被有效响应的输出覆盖。
如果迭代器将错误传递给此回调,则主回调(映射函数)被立即调用,并出现错误
异步#映射
相关文章:
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何从Java/scala调用js美化程序
- 如何调用这个匿名 JavaScript 函数
- 如何从模块链中调用函数.导出到节点中
- 我需要从php调用javascript或jquery
- Chrome开发工具(如何知道我在调用哪个javascript对象)
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 多个AJAX调用调用相同的成功函数不起作用
- 补间.js添加事件侦听器后不调用调用函数
- 使用函数调用调用 jQuery 弹出窗口
- 如何使用 jquery Ajax 调用调用类的方法
- jQuery从不为ajax调用调用.done()或.always()
- 使用angular js-ajax调用调用php-json服务文件
- 通过javascript调用调用jsp页面
- Angular Service可以在控制器中调用调用该服务的函数吗?
- 在jquery中从ajax调用调用Javascript函数
- 有没有一种安全的方法可以调用“调用”来调用 JavaScript 中的函数
- 在rails 3中,如何使用page.调用调用函数并向其传递多个参数