Node.JS async.parallel不会等到所有任务都完成

Mak*_*iev 6 javascript parallel-processing node.js progress-bar node-async

我使用aync.parallel并行运行两个函数.这些函数请求RSS提要.然后解析RSS提要并将其添加到我的网页.

但由于某种原因async.parallel运行回调方法而不等到两个函数完成

文件说:

任务完成后,结果将作为数组传递给最终回调.

我的代码.

require('async').parallel([ function(callback) {
        fetchRss(res, bbcOpts); // Needs time to request and parse
        callback();
    }, function(callback) {
        // Very fast.
        callback();
    } ], function done(err, results) {
        if (err) {
            throw err;
        }
        res.end("Done!");
    });
Run Code Online (Sandbox Code Playgroud)

事实上我只有"完成!" 在我的网页上.为什么?

我为什么需要打电话res.end()

Node.js的文件说:

必须在每个响应上调用方法response.end().

如果我不打电话,我的网页将被"下载"(我的意思是我的浏览器地址栏中的进度条).

Pau*_*gel 10

我想你的fetchRss函数是异步的:稍后执行,并立即调用回调.您应该将回调发送到fetchRss:

function fetchRss(res, bbcOpts, callback) {
    doSomething();
    callback();
}

require('async').parallel([ function(callback) {
        fetchRss(res, bbcOpts, callback); // Needs time to request and parse
    }, function(callback) {
        // Very fast.
        callback();
    } ], function done(err, results) {
        if (err) {
            throw err;
        }
        res.end("Done!");
    });
Run Code Online (Sandbox Code Playgroud)

在旁注中,您应该调用res.end()以便Node知道消息已完成并且已写入所有内容(标题+正文).否则,套接字将保持打开状态并将永远等待另一条消息(这就是浏览器显示进度条的原因:它不知道请求已经结束).