我正在学习coffeescript并将它与node.js一起使用,在express.js上构建一个基本的rest api。
我开始意识到我的代码被多层回调覆盖。一些谷歌搜索向我展示了一些替代方案,如承诺、期货和生成器。
- 我对这些术语不熟悉。你能用通俗的话解释一下吗?
- 这些中的任何一个都可以在 Coffeescript 中使用吗?如果是这样,我将非常感谢一些资源来学习它。
- 你有他们的偏好吗?
我正在学习coffeescript并将它与node.js一起使用,在express.js上构建一个基本的rest api。
我开始意识到我的代码被多层回调覆盖。一些谷歌搜索向我展示了一些替代方案,如承诺、期货和生成器。
看看 async.js ( https://github.com/caolan/async ) 它没有引入新概念,但允许您将回调汤简化为更易于管理和可读的东西。例如,而不是
foo(data, (err, result) ->
bar( result, (err, omgimtired) ->
foobar(omgimtired, (err....) ->
...
)
)
)
您可以使用async.waterfall
并为其提供一个函数列表,以便一个接一个地调用。
Promise 非常简单(如果您设法围绕它们进行思考)。它们描述了一个对象,该对象是特定操作的结果。想象一下,您从所有函数返回对象,这些对象代表结果。现在想象每个结果都有一个函数 ( then(...)
),它被传递一个“成功”完成的回调和一个不成功的回调。容易,对吧?唯一让 Promise 与众不同的是,这个回调可能会返回另一个 Promise,它应该首先实现,以实现“封闭”的 Promise。等等。您只需用调用链替换一系列回调.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/
喝这个 Kool-Aid http://www.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript 从关于类似主题的相当彻底的答案中什么JavaScript 中的 Deferred、Promise 和 Future 有什么区别?