等待createWriteStreamToBlockBlob中的回调

时间:2015-10-21 17:29:11

标签: node.js azure stream azure-storage

我试图将流管道传输到Azure的createWriteStreamToBlockBlob但是我无法让它等到回调返回之后再切换到下一部分。我需要在流到firstLine之前返回回调。 blobStream流和firstLine流都在回调之前结束。

var blobStream = blobService.createWriteStreamToBlockBlob(config.STORAGE_CONTAINER, _blobFilePath,
        function(err, result){
            console.log(result);
    })
    .on("end", function() {
        console.log("finished");
    })

busboy
    .on('file', function(fieldname, file, filename, encoding, mimetype) {
        file
        .pipe(blobStream)
        .pipe(firstLine)
    })

1 个答案:

答案 0 :(得分:1)

只有在writeStream发出“完成”事件后才会触发回调函数。虽然我们可以将readStream传递给多个writeStreams,但是我们不能将管道分成几个步骤。

如果在管道进入firstLine流之前必须处理Azure函数的结果,则可以将该文件存储在临时文件中,然后在回调闭包中输入firstLine

var blobStream = blobsrv.createWriteStreamToBlockBlob(container, filename,
        function (err, result, res) {
        if (err) {
            console.error(err);
        } else {
            console.log(result);
            console.log(res);
            fs.createReadStream('tmpfile.txt').pipe(firstLine);
        }
    })
busboy
    .on('file', function (fieldname, file, filename, encoding, mimetype) {
        var r = file
        .pipe(blobStream)
        .pipe(new fs.createWriteStream('tmpfile.txt'));
   })

如果您只需要处理内容的第一行,则可以在createWriteStreamToBlockBlob()的“data”事件中处理它。

var blobStream = blobsrv.createWriteStreamToBlockBlob(container, filename,
        function (err, result, res) {
        if (err) {
            console.error(err);
        } else {
           console.log(result);
           console.log(res);
       }
    })
    .on("data", function (chunk){
        console.log("get data : "+chunk);
    })