NodeJ从异步函数中追加数据

时间:2017-01-29 11:29:53

标签: javascript jquery node.js

我们说我的网页上有一个按钮和一个输出字段。 当我单击按钮时,会多次调用异步函数。 每次,函数都会返回一些数据,我想将这些数据发送到输出字段(并附加到以前的数据)。

这是main.js:

$(document).ready(function () {
$("#submitButton").on('click', function () {
        $.post(
            '/',
            {
                text: inputField.val(),
                depth: $('#depthField').val()
            },
            function (response) {
                let outField = $('#outputField');
                let txt = outField.text().trim();
                outField.text(txt + "\n new data: " + response);
            }
        );
    });
}

然后我有一个index.js:

router.post('/', function (req, res) {
    let text = req.body.text;

    getHTML(text, function (buf) {
        doParse(buf, function (out) {
            res.send(out);
        })
    });
});

getHTML返回一些数据,由doParse继续。 doParse还会生成一些数据,这些数据应该被解析回输出字段。

我想,post-method不是正确的方法,因为它只被调用一次?

编辑1:

问题是,我只能看到第一个数据,它是由回调发送的,然后我得到了一个

(node:16436)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):错误:发送后无法设置标头。

编辑2:

2个函数的主要工作' getHTML'和' doParse' :

const getHTML = function(callback) {
    for (let j = 0; j < 10; j++) {
        callback(j);
    }
};

const doParse = function(buf, callback) {
    let msg = 'val = ' + buf;

    console.log(msg);
    callback(msg);
};

1 个答案:

答案 0 :(得分:0)

您应该使用.write()代替.send(),如前所述here

因为.send()只是res.write(); res.end()的包装,所以不要忘记在完成后手动以.end()结束回复。