ファイルを解凍し、さらに処理するために解凍されたファイルをさらに読むノードjs関数を書いています。問題は、ファイルが非同期で解凍される前に、read関数が開始され、ファイルが見つからないというエラーが発生して失敗することです。ファイルを読み込む前にプロセスの解凍を待つ方法を提案してください。非同期メソッドが終了するのを待つ
答えて
てくれてありがとう答え、私はそれに続くコードで働いている -
fs.createReadStream('master.zip')
.pipe(unzip.Extract({ path: 'gitdownloads/repo' }))
.on('close', function() {
...
});
はこちらをご覧ください:
https://blog.risingstack.com/node-hero-async-programming-in-node-js/
ノードヒーロー - Node.jsの
で理解非同期プログラミングがノードヒーローと呼ばれる。これは、チュートリアルシリーズの第三のポストである - ことができますこれらの章でNode.jsを使い始め、それを使ってソフトウェア製品を提供する方法を学んでください。
この章では、非同期プログラミングの原則について説明し、JavaScriptとNode.jsで非同期を行う方法を示します。
非同期ライブラリー(http://caolan.github.io/async/)
このライブラリは、あなたが持っている機能のexecusionを制御するために使用されています。例えば
:解凍タスクはコールバックfuncionを呼び出した後
async.series({
unzip: function(callback) {
unzip('package.zip', function(err, data) {
if(!err)
callback(null, data);
});
}
}, function(err, results) {
// results is now equal to: {unzip: data}
readingUnzipFiles(...);
});
ここreadingUnzipFilesが実行されます。
Promisses
別の解決策は、Q(https://github.com/kriskowal/q)のようなpromisseモジュールを使用して次のようになります。
function unzip(fileName, outputPath) {
var deferred = Q.defer();
fs.createReadStream(fileName)
.pipe(unzip.Extract({ path: outputPath }))
.on('end', function(){
deferred.resolve(result);
});
return deferred.promise;
}
その後、あなたのような機能を使用できます。
unzip('file.zip', '/output').then(function() {
processZipFiles();
});
.Thanksと記入してください。私のunzip関数は、ファイルシステムに多くのファイルを書き込むので、すべてが書き込まれた後に処理するためにそれらを読みたいと思います。上の例でこれを解決できますか? – geekintown
私は、各ファイルを書き込むためにfs.writeFile()関数を使用しています。すべてのファイルが書き込まれたときにコールバックを取得する方法です。ありがとうございます – geekintown
あなたのコード実装を更新して見てみましょうか? –
- 1. C#DLL非同期メソッドの終了を待つ
- 2. 非同期呼び出しが終了するまで待つ -
- 3. Swift Make For Loopが非同期関数の終了を待つ
- 4. 非同期メソッドを待つ
- 5. 完了ブロック内で非同期コールが終了するのを待つ
- 6. 非同期タスクが終了するまでの角度待ち
- 7. 非同期タスクが終了するまでの待機方法
- 8. UIスレッドからアプリケーション終了時に非同期タスクを待つ
- 9. 非同期操作の関数が終了するのを待つ
- 10. 非同期ロードされたクラスが終了するのを待つ(コールバックなし)
- 11. ユニットテストケースで空の非同期メソッドが完了するのを待つ
- 12. 続行する前にJavascriptの同期ループ内で非同期コールバックが終了するのを待つ方法
- 13. void非同期メソッドを待つ
- 14. 非同期のajax要求が完了するのを待つ
- 15. 非同期コードが完了するのを待つSwift
- 16. 非同期要求が完了するのを待つ
- 17. Silverlight - メソッドから戻る前に非同期呼び出しが終了するまで待つ
- 18. 分度器 - 非同期が終了するのを待っています
- 19. 非同期/待つ()
- 20. 非同期メソッドSpiDevice.FromIdAsyncが終了しません
- 21. 非同期ループプロセスでプロセスが終了するまでスリープ/待機する
- 22. 非同期メソッドを待つ必要がありますか?
- 23. 非同期メソッドを待つ必要がありますか?
- 24. 非同期メソッドと待機メソッド
- 25. メソッドが非同期呼び出しの結果を待つ
- 26. 別のファイルを実行する前に非同期関数が終了するのを待つ
- 27. 非同期メソッド呼び出し中のメインスレッド終了?
- 28. メインスレッドが終了すると非同期タスクが終了しますか?
- 29. 非同期タスクが終了するのを待つAngular JSを開始する前に
- 30. Elasticsearch.js - pingの完了を待つ、非同期の呼び出し
ありがとう@EAK TEAM – geekintown
あなたが役に立ったら、回答またはアップヴォートとして –