2015-10-21 2 views
0

J'essaie d'acheminer un flux vers createWriteStreamToBlockBlob d'Azure mais je n'arrive pas à l'attendre avant que le callback ne retourne à la partie suivante. J'ai besoin du rappel pour revenir avant que le flux arrive à firstLine. Le flux blobStream et le flux firstLine se terminent tous les deux avant le rappel.Attendre le rappel dans createWriteStreamToBlockBlob

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) 
    }) 

Répondre

1

La fonction de rappel ne sera déclenché après l'événement « d'arrivée » de writeStream émis. Bien que nous puissions diriger un flux readStream vers mulit writeStreams, nous ne pouvons pas diviser le canal en étapes.

Si vous devez gérer le résultat de la fonction Azure avant le canal dans le flux firstLine, vous pouvez stocker le fichier dans un fichier temporaire, puis acheminer vers firstLine en fermeture de rappel.

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')); 
    }) 

Si vous avez juste besoin de gérer la première ligne du contenu, vous pouvez le manipuler dans l'événement « data » de createWriteStreamToBlockBlob().

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); 
    })