我试图将流管道传输到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)
})
答案 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);
})