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(...)) があり、「成功」完了のコールバックと失敗した完了のコールバックが渡されると想像してください。簡単ですよね?プロミスを特別なものにする唯一のことは、このコールバックが別のプロミスを返す可能性があることです。これは、「囲んでいる」プロミスが満たされるために最初に満たされる必要があります。等々。一連のコールバックを一連の呼び出しに置き換えるだけです.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 を、同様のトピックに関する非常に徹底的な回答から飲みますの Deferred、Promise、Future の違いは何ですか?

于 2013-07-24T07:37:16.233 に答える