0

我正在学习coffeescript并将它与node.js一起使用,在express.js上构建一个基本的rest api。

我开始意识到我的代码被多层回调覆盖。一些谷歌搜索向我展示了一些替代方案,如承诺、期货和生成器。

  1. 我对这些术语不熟悉。你能用通俗的话解释一下吗?
  2. 这些中的任何一个都可以在 Coffeescript 中使用吗?如果是这样,我将非常感谢一些资源来学习它。
  3. 你有他们的偏好吗?
4

1 回答 1

0

看看 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 有什么区别?

于 2013-07-24T07:37:16.233 回答