2017-05-12 15 views
0

ここでの関数は、たくさんのファイルを作成しますが、それらに書き込むことはありません。いつか最後にPromise.allを削除しても、その機能を完全に解決しないと、ファイルにデータが書き込まれます。私が何を書こうとしているのかは関係ありません。私はすべてをコメントにして、「こんにちは世界」と書くだけで、それでも何も書きません。質問は簡単です、なぜですか?ストリームが実際に完了した約束事でファイルに書き込む

const writeSmilFiles = (smilInfo) => { 
    return new Promise ((resolve, reject) => { 
    const p1 = smilPartOne(); 
    const p2 = smilPartTwo(); 

    let promises = dataTypes.new.camera_set.map(instance => { 
     return new Promise((resolve, reject) => { 
     const smilEntries = smilInfo.filter(smil => smil.BroadcastAndKlippTupleId == instance.BroadcastAndKlippTupleId && smil.CameraId == instance.CameraId); 
     try { 
      const fileName = `${__dirname}/newSmilFiles/${smilEntries[0].Smil}`; 
      const file = fs.createWriteStream(fileName); 
      file.write(p1); 

      smilEntries.forEach(entry => { 
      const smilEntry = smilSwitch(entry.Filename, entry.Bitrate, entry.Width, entry.Height); 
      file.write(smilEntry); 
      console.log(smilEntry); 
      file.write('\n'); 
     }); 

      file.write(p2); 
      file.end(); 
      resolve(`Smil written.`); 
     } catch (ex) { 
      reject(ex); 
     } 
     }); 
    }); 

    Promise.all(promises).then(msg => { 
     resolve(msg); 
    }); 
    }); 
}; 
+1

は、あなたが同様にあなたの質問に、簡略化された「Hello World」のバージョンを提供していただけますか?単純化されたバージョンをデバッグする方が簡単かもしれません。 –

+3

これはあなたの問題の原因ではありませんが、 'return Promise.all(...)'を使用して、あなた自身を作成し​​ている余分な約束事には入れないでください。あなたがしていることは、約束どおりの反パターンであり、実際には、あなたの約束が拒否された場合のプログラミングエラーです。 – jfriend00

+0

@ jfriend00ありがとう、すばらしいヒント。私はこれについて実際には疑問に思っていました - 今は意味があります! :) –

答えて

2

解決:

file.on("finish",() => resolve(`Smil written.`)); 
+0

まだfsライブラリで学ぶfuncionalities私は推測する。本当にありがとう :) –