我有四個並行運行的函數。如果任何一個函數在兩者之間失敗,我怎樣才能停止執行其他函數。任何對此的幫助將會非常有幫助。停止並行執行
停止並行執行
回答
我認爲你應該使用異步庫。異步包含並行功能,並行執行功能(當然)。並且每個函數都需要回調(錯誤,結果)。 如果發生錯誤,異步將切斷所有其他進程。
,除非它是一個的setTimeout或setInterval的,我覺得你不能。無論如何,您可以在功能邏輯中設置檢查點。它不是一個乾淨的,但它可以工作。例如,檢查在回調其它功能:
var control = true;
async1(function(e,r){
if(e) {
control = false;
return callback1(e,r);
};
if(control) callback1(e,r);
});
async2(function(e,r){
if(e) {
control = false;
return callback2(e,r);
};
if(control) callback2(e,r);
});
Althougt要做到這一點,我會去與throrin19和說,異步這是一個不錯的lib做到這一點。
但也許你想檢查co。它可以比Async更好地處理您的問題。
fun1(){ //一些I/O操作 //檢查數據庫中的狀態 if(status ===「failed」) throw new Error(「Failed」); } FUN2(){ //等待HTTP響應 } 兩者FUN1()和FUN2()被平行運行。如果fun1()失敗,程序應該終止。 – user87267867
如果你想完成這個程序,你可以做一個簡單的'process.exit()'。如果你只想取消http請求,不要等待響應,你可以用'.destroy()'關閉流。如果我正確理解你的話,這應該有效。 – durum
你可以在這裏看到如何放棄一個更詳細的請求:http://stackoverflow.com/questions/16194017/stop-downloading-the-data-in-nodejs-request – durum
您無法停止執行某個功能。函數被執行並同步返回,所以在技術上沒有什麼可以停止的。但是可以有一些異步任務,它們以某種方式使用底層的libuv功能(也就是說,如果不調用某個異步節點API或某個本地模塊,則無法進行任何異步操作)。函數只是這些任務的接口,它們不支持取消任務,只能啓動。
所以,你不能真的取消異步操作,但是你可以做的是忽略其他操作的結果,如果一個失敗。下面是它是如何實現的:
var tasks = [], //array of tasks, functions accepting callback(err)
pending = tasks.length, //amount of pending tasks
failed = false;
function done(err) { //callback for each task
if (failed) return;
if (err) {
failed = true;
callback(err); //callback for all tasks
}
if (!--pending) callback(); //all tasks completed
}
tasks.forEach(function(task) {
task(done);
});
但我想你可以用async來實現這樣的功能。雖然內部它做這樣的事情 – vkurchatkin
對。雖然你的問題與我的不同,因爲你只會得到第一個錯誤。什麼是更好的?這真的取決於編碼員想要做什麼。最抽象的異步函數做到這一點是並行的:https://github.com/caolan/async#paralleltasks-callback – durum
是的,這取決於,但由於我們試圖模仿取消我的方法似乎更接近(就好像我們真的取消了他們既不會成功也不會失敗的其他行動)。順便說一下,它看起來async.parallel具有相同的確切行爲 – vkurchatkin
- 1. 停止並行執行PHP腳本
- 2. 停止javascript執行
- 3. 停止SAS執行
- 4. 停止執行JavaScript
- 5. 停止QThread執行
- 6. 停止執行javascript?
- 7. jNIce - 停止執行
- 8. 程序無故執行並停止
- 9. 停止並繼續執行For循環
- 10. C# - 句柄異常並停止執行
- 11. 如何停止執行eventlisteners
- 12. javascript:setInterval執行不停止
- 13. Chrome停止視頻執行
- 14. 停止執行C#代碼
- 15. 停止執行getCurrentPosition方法
- 16. 線程停止執行
- 17. HttpListner停止執行thread.Join()
- 18. 停止執行頁面
- 19. mysqli_multi_query何時停止執行?
- 20. 如何停止Maven執行
- 21. 執行後停止服務
- 22. 停止執行 - 的WinForms
- 23. Java執行隨機停止
- 24. CTS執行停止中途
- 25. 停止執行Groovy腳本
- 26. GWT突然停止執行
- 27. 在JavaScript中停止執行
- 28. ASP.NET:停止代碼執行
- 29. JDialog停止執行父JFrame
- 30. Rails停止執行功能
唯一的問題,異步不會停止執行其他功能,它會模擬忽略它。 –