例如,您有一個Web音樂播放器應用程序。當用戶點擊播放按鈕時,會觸發一個功能,查找MP3數據,設置播放器等等,但是然後用戶改變主意並點擊另一首曲目上的播放。有沒有辦法完全取消前面的功能?我知道你可以放棄XHRequests,但我的意思是整個功能。也許JS承諾?如何中止JavaScript異步函數?
1
A
回答
2
在JavaScript中的同步功能將運行至完成。它不會被其他用戶操作中斷。因此,在您的場景中,如果某個函數觸發並正在設置播放器,則在處理下一個用戶事件之前,該函數將運行至完成狀態。所以,你不能在javascript中放棄一個同步函數,反正沒有辦法,因爲(除了web worker,這裏不是我們討論的內容),javascript是單線程,只要函數正在運行,它會運行完成並且不會處理其他用戶事件。
但是,如果該函數中有某種異步操作(例如通過ajax或加載音樂文件的播放器加載某些內容),那麼是否可以中止異步操作是否可以中止,完全取決於特定的支持在那個操作中 - 沒有通用的中止。爲了幫助我們解決異步細節問題,您需要披露您的實際代碼,以便我們看到您正在做的事情。
承諾是不是中止異步操作的工具。事實上,他們是一個相反的工具,因爲他們報告異步操作發生的事情和時間。它們不會導致這些事情發生,然後在異步操作發生時才通知觀察者。
如通常是StackOverflow的問題的情況下,我們可以幫助深入更多,如果您披露您的實際代碼,因爲這將您的問題從理論的討論變成什麼樣的選擇是對的實證分析你的實際代碼。
相關問題
- 1. Javascript異步函數
- 2. 的JavaScript:異步函數
- 3. 編寫異步javascript函數
- 4. 異步加載javascript函數
- 5. 異步加載JavaScript函數。
- 6. 在JavaScript中停止未決的異步函數
- 7. javascript函數是同步還是異步?
- 8. JavaScript:異步函數,恢復到同步
- 9. 如何爲異步函數創建異步包裝函數?
- 10. 客戶端異步JavaScript函數(如何編寫回調函數)
- 11. 在javascript中的異步遞歸函數
- 12. JavaScript中的遞歸異步函數
- 13. 在JavaScript中異步調用函數
- 14. 在javascript中異步執行函數
- 15. 異步函數異步函數
- 16. 如何從javascript中的異步函數傳遞參數?
- 17. 如何使用參數作爲異步函數(Javascript)編寫同步函數?
- 18. 如何終止C#中的異步函數
- 19. 如何在array.forEach中使用Javascript中的異步函數等待
- 20. React-native防止函數異步執行?
- 21. 如何在Javascript中創建一個異步函數?
- 22. 如何在異步函數中使用javascript對象
- 23. 如何處理JavaScript中的異步函數結果
- 24. 如何從頭開始在Javascript中編寫異步Map函數?
- 25. 如何在javascript中調用異步函數
- 26. 如果我在JavaScript中只包含異步函數的函數,新函數是否也是異步的?
- 27. Javascript \ Kango:如何在非異步函數中獲取異步JS函數的返回值?
- 28. JavaScript:如何在異步內部函數中返回外部函數?
- 29. 測試異步異步等待JavaScript函數
- 30. 在異步函數中調用函數javascript(流星)undefined
取決於函數,但沒有,你不能只是取消任何異步函數具有一些特殊的方法。 – adeneo
沒有辦法'取消'一個功能。它必須是API的一部分。在你的例子中,它聽起來像AJAX,你可以取消。 –
您不能取消您已經完成的功能的結果。但是你的帖子中沒有這個問題。只需重新構建你的模型。你不需要你所要求的。 –