async.parallel中的回调如何工作(它来自哪里?)

时间:2016-05-03 23:53:23

标签: javascript asynchronous callback asynccallback

我在docs中找到了这个例子。我理解主回调(函数(错误,结果)......)是如何工作的,但回调是什么?传递给一个和两个函数的参数?来自哪里,他们做了什么?

TextMessagesAsAuthor

2 个答案:

答案 0 :(得分:3)

callback参数由异步基础结构传递给您的函数。它指向异步内部的一个函数(虽然这不是你需要知道的东西)。异步基础架构将它传递给您,并要求您在合适的时间调用它。

这是您回复异步库的方式,告诉它​​您的异步函数已完成其工作,以及它是成功完成还是错误。当您的函数完成它的工作时,您调用该函数并通知异步库现在已完成此过程的这一步(错误或成功)。

仅供参考,如果您熟悉node.js中的Express中间件,它与传递给中间件的next参数非常相似。当您的中间件被调用时,传递给它的一个参数是next回调。您的中间件可以完成其工作(可能是异步的),然后在完成后,它会通过调用传递给它的next()回调告诉Express基础设施它已完成。

这是Express的一个类似的例子:

app.use(function (req, res, next) {
  doSomethingAsync(function() {
       next();
  })
});

答案 1 :(得分:1)

它不是来自任何地方,它只是库的工作方式,回调用于将数据传递给下一个函数。

这是函数:

function _parallel(eachfn, tasks, callback) {
    callback = callback || noop;
    var results = isArrayLike(tasks) ? [] : {};

    eachfn(tasks, function (task, key, callback) {
        task(rest(function (err, args) {
            if (args.length <= 1) {
                args = args[0];
            }
            results[key] = args;
            callback(err);
        }));
    }, function (err) {
        callback(err, results);
    });
}

https://github.com/caolan/async/blob/master/dist/async.js#L3471