2

我有一个数组,我需要使用一些编辑重新编译。我是在 的帮助下完成的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);
});

在我看来,一切都是合乎逻辑的。在第一次迭代后立即调用回调。但是处理完整个数组后如何发送数据呢?

谢谢!

4

3 回答 3

3

而不是callback(dialog);,你想要

callback(null,dialog);

因为回调函数的第一个参数是一个错误对象。console.log(arguments)第一次迭代后被调用的原因是async认为发生了错误。

于 2013-07-17T14:19:27.983 回答
2

我解决了这个问题,但不明白它的含义。问题是由于元素为 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);
});
于 2013-07-17T15:17:59.843 回答
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);
}

于 2020-05-20T03:54:52.123 回答