我有一个数组,我需要使用一些编辑重新编译。我是在async.concat()
的帮助下完成的,但有些东西不起作用。
告诉我,错误在哪里?
async.concat(dialogs, function(dialog, callback) {
if (dialog['viewer']['user_profile_image'] != null) {
fs.exists(IM.pathToUserImage + dialog['viewer']['user_profile_image'].replace('%s', ''), function(exits) {
if (exits) {
dialog['viewer']['user_profile_image'] = dialog['viewer']['user_profile_image'].replace('%s', '');
}
callback(dialog);
});
}
}, function() {
console.log(arguments);
});
在我看来,一切都是合乎逻辑的。第一次迭代后立即调用回调。但是,如何在完成整个阵列的处理后发送数据呢?
谢谢!
答案 0 :(得分:3)
而不是callback(dialog);
,你想要
callback(null,dialog);
因为回调函数的第一个参数是错误对象。在第一次迭代后调用console.log(arguments)
的原因是因为async
认为发生了错误。
答案 1 :(得分:1)
我解决了这个问题但却没有理解它的含义。问题是由于元素为null而不是处理值。该程序此时已中断,但不要丢弃任何错误/警告。
async.map(dialogs, function(dialog, callback) {
if (dialog['viewer']['user_profile_image'] == null) {
dialog['viewer']['user_profile_image'] = IM.pathToUserImage;
}
fs.exists(IM.pathToUserImage + dialog['viewer']['user_profile_image'].replace('%s', ''), function(exits) {
if (exits) {
dialog['viewer']['user_profile_image'] = dialog['viewer']['user_profile_image'].replace('%s', '');
}
callback(null, dialog);
});
}, function(err, rows) {
if (err) throw err;
console.log(rows);
});
答案 2 :(得分:0)
尽管我发布这个答案有点晚了,但我发现我们当中没有人以应有的方式使用.concat函数。
我创建了一个片段,说明该功能的正确实现。
let async = require('async');
async.concat([1, 2, 3], hello, (err, result) => {
if (err) throw err;
console.log(result); // [1, 3]
});
function hello(time, callback) {
setTimeout(function () {
callback(time, null)
}, time * 500);
}