调用与节点异步的函数,这更符合Q或回调

时间:2015-06-23 06:46:34

标签: javascript node.js callback promise q

我的节点应用程序具有调用其他两个函数的函数,我想对它使用一些异步行为,建议在这种情况下使用。 示例将非常有用。

function myFunction(req,res){

//从这里开始,这是我想在函数中使用warp的第一个地方

var dataChunks = [],
                dataRaw,
                data;

                req.on("data", function (chunk) {
                    dataChunks.push(chunk);
                });

                req.on("end", function () {
                    dataRaw = Buffer.concat(dataChunks);
                    data = dataRaw.toString();
                    console.log(data);

//这是我要在函数中扭曲并在第一个函数之后调用的第二个代码

 var filePath = 'C://test.txt';
                var writeStream = fs.createWriteStream(filePath, {flags: 'w'});
                writeStream.write(data);
                res.status(200).send('ok');

            })

}

还有一件事,正如我所看到的那样异步是节点框架如何工作以及添加像Q这样的额外库是不是有点过分?

1 个答案:

答案 0 :(得分:1)

我甚至不明白为什么你特别需要承诺。

function myHandler(req, res) {
    var dataChunks = [],
        dataRaw,
        data;

    req.on("data", function (chunk) {
        dataChunks.push(chunk);
    });

    req.on("end", function () {
        dataRaw = Buffer.concat(dataChunks);
        data = dataRaw.toString();
        console.log(data);
        var filePath = 'C://test.txt';
        var writeStream = fs.createWriteStream(filePath, {flags: 'w'});
        writeStream.write(data);
        writeStream.on('finish', function() {
            res.status(200).send('ok');
        });
        writeStream.end();
    });
}      

或者,您可以将传入的流直接传输到文件流中,并编写更少的代码。

function myHandler(req, res) {
    var filePath = 'C://test.txt';
    var writeStream = fs.createWriteStream(filePath, {flags: 'w'});
    req.pipe(writeStream);
    req.on("end", function() {
        res.status(200).send('ok');
    });
}