我正在編寫一個節點js函數,它將文件解壓縮並進一步讀取解壓縮的文件以進一步處理。問題是,在文件異步解壓縮之前,讀取函數會啓動並且會失敗,並顯示找不到文件錯誤。請在讀取文件觸發器之前建議可能的方法來等待解壓縮過程。等待異步方法完成
等待異步方法完成
回答
感謝答案,我已經得到它與以下代碼 -
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使用。
例如:
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(...);
});
這裏一旦解壓任務調用回調funcion readingUnzipFiles執行。
Promisses
另一個解決方案是使用像Q上promisse模塊(https://github.com/kriskowal/q):
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。我的解壓縮函數將許多文件寫入文件系統,並且我想只在所有文件寫入後纔讀取它們。上面的例子可以解決這個問題嗎? – geekintown
我正在使用fs.writeFile()函數來編寫每個文件。是他們在寫入所有文件時獲得回調的一種方式。謝謝 – geekintown
你能更新你的代碼實現來看看嗎? –
- 1. 等待異步方法完成
- 2. 等待異步方法來完成
- 3. 等待兩種異步方法完成
- 4. 等待異步方法完成
- 5. 等待完成異步方法
- 6. 如何等待異步方法等待完成所有執行?
- 7. javascript:等待異步完成
- 8. 等待GetJSON異步完成
- 9. 等待異步方法從單獨的方法完成
- 10. 等待同步異步方法在同一線程上完成
- 11. nunit如何成功等待異步void方法完成?
- 12. 等待非異步方法
- 13. 異步方法並等待
- 14. 異步\等待方法
- 15. 異步/等待+ FromEvent方法
- 16. 等待異步WCF方法
- 17. 等待機箱的異步方法完成javascript
- 18. Objective-C - 正在等待兩種異步方法來完成
- 19. 如何等待異步方法在後臺完成
- 20. C#沒在等待異步方法完成
- 21. 等待循環中的異步方法完成
- 22. ContinueWith方法不等待,直到異步任務完成
- 23. 等待異步通話完成 - 太晚
- 24. 如何等待異步調用完成?
- 25. 等待多個異步任務完成
- 26. NodeJS等待異步功能完成foreach
- 27. 異步Storec Proc無需等待完成
- 28. 如何等待異步調用完成
- 29. 等待異步節儉請求完成
- 30. 等待完成異步操作
謝謝@EAK TEAM – geekintown
如果您覺得有用,請標記爲答覆或請注意 –