KOA を使用してファイルをアップロードするときに、 co-busyboyを使用してファイル フィールドを解析します。公式の例は次のようになります。
var parse = require('co-busboy')
var parts = parse(this);
var part;
while (part = yield parts) {
if(!part.length) //it is a stream
part.pipe(fs.createWriteStream('some file.txt'));
}
何らかの理由で、すべての「部分」ストリームを配列に保存し、すべてのファイル ストリームがフェッチされたときに実際のファイル書き込みを実行したいと考えています。すなわち:
var parse = require('co-busboy');
var parts = parse(this);
var part;
var partArrays = [];
var cnt = 0;
while(part = yield parts){
partArray[cnt++] = part;
}
//after some processing, I perform the writing
for(file in partArray){
file.pipe(fs.createWriteStream('some file.txt');
}
問題は、whileループが継続しないことです。part.pipeを呼ばないとループが止まってしまうようです。
では、while ループを継続させるにはどうすればよいでしょうか。