我正在學習coffeescript,並將其與node.js結合使用,在express.js上構建基本的rest api。Coffeescript + Node.js:回調的替代品
我開始意識到我的代碼覆蓋了多層的回調。一些谷歌搜索告訴我,有一些替代品,如承諾,期貨和發電機。
- 我不熟悉這些條款。你能用通俗的話來解釋這些嗎?
- 這些都可以在Coffeescript中使用嗎?如果是這樣,我將不勝感激一些資源來學習它。
- 你有偏好嗎?
我正在學習coffeescript,並將其與node.js結合使用,在express.js上構建基本的rest api。Coffeescript + Node.js:回調的替代品
我開始意識到我的代碼覆蓋了多層的回調。一些谷歌搜索告訴我,有一些替代品,如承諾,期貨和發電機。
看async.js(https://github.com/caolan/async) 它不引入新的概念,但可以簡化回調湯成更易於管理性和可讀性。例如,而不是
foo(data, (err, result) ->
bar(result, (err, omgimtired) ->
foobar(omgimtired, (err....) ->
...
)
)
)
你可以只用async.waterfall
和飼料它的功能清單,呼籲此起彼伏。
承諾是相當簡單的(如果你設法圍繞他們思考)。他們描述了一個特定操作結果的對象。想象一下,你從所有代表結果的函數中返回對象。現在想象一下,每個結果都有一個函數(then(...)
),它傳遞了一個「成功」完成回調和一個不成功回調回調。很簡單,對吧?唯一讓承諾特別的是這個回調可能會返回另一個承諾,這應該首先被滿足,以實現「封閉」承諾。等等。您只需用.then(...)
調用的鏈來替換一系列回調。
Parse.User.logIn("user", "pass", {
success: function(user) {
query.find({
success: function(results) {
results[0].save({ key: value }, {
success: function(result) {
// the object was saved.
}
});
}
});
}
});
與
Parse.User.logIn("user", "pass").then(function(user) {
return query.find();
}).then(function(results) {
return results[0].save({ key: value });
}).then(function(result) {
// the object was saved.
});
從http://blog.parse.com/2013/01/29/whats-so-great-about-javascript-promises/
喝這庫爾急救http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript 從類似的話題What are the differences between Deferred, Promise and Future in JavaScript?
1.谷歌適用於這種類型的更好的相當完整的答案題。是的,所有的JavaScript結構都可以用於咖啡腳本。這裏有幾個陣營,但節點純粹主義者堅持普通的舊回調。 –