2015-08-28 69 views
1

在官方藍鳥承諾頁面中寫道,如果您使用的是node.js,那麼我不太可能必須自己寫承諾。我應該在ES6節點項目中使用多少承諾?

自從我開始一個新項目後,我發現我的所有代碼庫都圍繞着承諾展開。例如,我有一個數據庫連接器,它返回一個承諾,一個承諾承諾的快速路由,測試承諾測試承諾和一般我沒有寫任何接收回調的函數。

我應該寫回調模塊,如果需要promisify他們?

有什麼缺點?

+0

承諾是偉大的。儘可能多地使用它們。公開從您的模塊返回它們的函數(如果適用的話),因爲不同的實現可以相互轉換。 – Ryan

回答

2

我應該在ES6節點項目中使用promise嗎?

是的,明確的。承諾是新的標準異步接口。

在官方藍鳥承諾頁面中寫道,我不太可能必須自己寫承諾。

不完全是。他們的意思here是你幾乎不需要使用構造函數new Promise - 它的大部分用法是an antipattern
你會想無處不在使用承諾,但你不想從回調顯式創建它們。如果您的異步代碼使用回調,則promisificationnew Promise更容易使用。

自從我開始一個新項目,我發現我所有的代碼庫周圍旋轉承諾

你真幸運!您正在使用的所有功能已經返回並期待承諾 - 這太棒了!你可以使用它們,擁抱它們。您不必擔心承諾代碼中的奇怪回調模式。

我應該寫回調模塊,如果需要promisify它們?

不是,如果你所使用的所有API已經使用promise。承諾使代碼更簡單,更正確。 They're just great

1

比較回調,您應該幾乎總是使用承諾。它們更可讀,解決一些嵌套問題,並提供標準化的方式來通知錯誤(使用reject())。

什麼官方藍鳥承諾頁面可能意味着是在節點

  • ,你經常可以解決的事情更好的性能,使用流(如一飲而盡一樣),你經常有回調,而不是承諾(認爲es.map()
  • 正如您所提到的es6,您可以使用generators而不是回調/承諾。他們在一起工作不好,所以堅持一個或另一個,但在某些情況下,他們很方便。
  • 你甚至可以使用es7功能async/await,這將有望使所有其他東西在未來不再使用。

回調的缺點。那麼......他們曾經是continuations,沒有編譯器設計師甚至想到直接打擾語言用戶。然後node.js來了,現在每個人都寫無休止地嵌套函數調用是不可讀(不要想到調試),不提供錯誤處理(除了事實上的標準有err作爲回調的第一個參數),並且不會與同調代碼交互。

+0

謝謝。你覺得我使用babel-node後,我應該從現在開始讓所有的後端使用asyc/await嗎?我有點害怕這樣做。 – arisalexis