務實地說,使用promise的主要優點是什麼?你能向我展示一些真實有用的承諾用法的例子嗎?在計劃中使用承諾有什麼主要優勢?
回答
在Scheme中,承諾只是一個具有未完成任務的值,如果您從不使用該值,則永遠不會計算該值。簡而言之,這是一種在其他渴望的計劃中進行懶惰評估的方法。一種典型的方法是在流而不是列表上進行計算。
通過列表,您可以使用更高階的函數,以便您可以列出一個列表,然後針對您感興趣的值對其進行過濾,然後轉換這些值,並且可能在某個時刻您有足夠的時間來生成所需的值。這是很好的,因爲你可以抽象每一步,這樣你就可以製作只執行一步的邏輯並組成步驟來製作整個程序,但在這種情況下,第一步需要全部完成才能在下一步處理結果第一個可能是,如果你正在搜索0到1000之間的第一個素數,並且在每一步中迭代了所有數字,那麼它可能不是那麼有效。這裏是流進來的地方。
流與代碼看起來相同,但中間結果是由需要。一個流是一對,其中的部分是承諾,以便代碼,否則會使一對延遲,直到使用的值。每一步都會爲下一步生成足夠的數據,因此應該足以讓第一步爲最後一步迭代20%的元素,以計算出最終結果,其中80%的休息永遠不會在任何步驟。對於這樣的結構,初始流也可以是無限的,如從0開始的所有數字增加1.
使用流涉及懲罰。想象一下,你可以制定一個算法來訪問所有的元素。然後,算法的流版本會比較慢,因爲創建的承諾和強制會導致程序開銷,而不是懶惰地進行計算。
您可能有興趣看到Hal Abelson explaining streams及其優缺點。
流還有其他替代方法可以進行懶惰評估。一個是generators。在這裏,您還可以製作組合程序,它需要一個生成器並生成一個生成器。迭代將需要像流一樣。
另一種選擇是transducers。這也是可組合的,並且像流和生成器一樣迭代,但與生成器不同,初始數據不能像流和生成器那樣是無限的序列,除非底層結構支持它。
在這個答案中使用承諾或任何其他技術的優點是不是方案特定的。它們適用於所有渴望的編程語言!
- 1. ASP.NET Webforms的主要優勢是什麼?
- 2. 將Silverlight從2升級到3有什麼主要優勢?
- 3. rspec比test :: unit有什麼主要優勢?
- 4. 擁有MSI安裝包的主要優勢是什麼?
- 5. 使用scrapyd有什麼優勢?
- 6. Hudson vs使用shellcript有什麼優勢?
- 7. 使用HttpApplication比HttpApplication有什麼優勢?
- 8. 使用Python Virtualbox API有什麼優勢?
- 9. 使用迭代器有什麼優勢?
- 10. 使用NSOutputstream有什麼優勢?
- 11. 使用Redux比React有什麼優勢?
- 12. 使用SVN比CVS有什麼優勢?
- 13. 使用SproutCore框架有什麼優勢?
- 14. 使用javacv比opencv有什麼優勢?
- 15. 使用BaseAdapter比ArrayAdapter有什麼優勢?
- 16. 使用chiliproject比redmine有什麼優勢?
- 17. 使用POCO比DataTables有什麼優勢?
- 18. 在aerospike中使用btree作爲主要指標的優勢是什麼?
- 19. 在Docker羣集模式中使用副本的主要優勢是什麼?
- 20. 製作課堂摘要的主要優勢是什麼
- 21. 在HTML中,使用div比使用表有什麼優勢?
- 22. AIDL在android中有什麼優勢?
- 23. 在C++中使用printf()比cout有什麼主要優點?
- 24. 什麼是主要優勢批註過XML在Java
- 25. Hibernate NamingStrategy有什麼優勢
- 26. reftype {}有什麼優勢?
- 27. 在數據中心上使用私有云有什麼優勢?
- 28. 我爲什麼要使用Angular 2?與Angular 1相比,它有什麼優勢?
- 29. ASP.net CORE優於Asp.net的主要優勢
- 30. 與Ruby相比,在String中使用StringIO有什麼優勢?