14

最近、Backbone.JS / jQuery / CoffeeScriptプロジェクトに取り組んでいるときに、コールバックとタイミングの問題が混乱していることに気づきました。先に進む前に何かが完了するのを待つ必要があり、ネストされたコールバックの混乱に陥っていました...これは混乱を招き、デバッグが困難です。次に、jQuerydeferredまたはIcedCoffeeScriptの2つの可能なソリューションを見つけまし

IcedCoffeeScriptawait&を追加するだけで、とても簡単に見えますdefer。しかし、そこにとどまるのだろうか?StackOverflowに関する質問は2つだけですか?CoffeeScriptと比較してそれについてはあまり話さない

もう1つは、2つの方法の違いは何ですか、ほとんど同じことをしているように見えますか?IcedCoffeeScriptを除いて、手続き型コードのように見え、jQuery deferredでは、コールバックの混乱をそれほど解決しません。

4

4 に答える 4

18

これらは非常に異なるテクノロジーです。

  • IcedCoffeeScriptは、同期スタイルでコードを記述できるように、コードを変換するキーワードawaitとキーワードを使用してCoffeeScriptを拡張するプリコンパイラです。defer生成されたJavaScriptで、ネストされた関数awaitを生成します。defer

  • jQuery Deferred(別名Promises)は、コールバックを完全に回避する方法です。コールバックを取得する代わりに、非同期関数はPromiseを返すことができます。次に、コールバックをPromiseにアタッチします。シンプルですが強力なテクニックです。私は自分の本、AsyncJavaScriptでそれに章を捧げています。

これらの各テクノロジーは、特定の種類のAPIで最適に機能します。awaitそしてdefer、関数が最後の引数として単一のコールバックを取ることを期待します。Promiseは、アプリに他のPromiseがたくさんある場合に最適に機能します。

JavaScriptで非同期動作を処理するための特効薬はありません。コールバック、Promises、PubSub(別名EventEmitters)を理解し、各ジョブに最適なツールを選択する必要があります。IcedCoffeeScript(これはすばらしい)を使用している場合でも、Promisesを使用すると膨大な量の作業を節約できる場合があります。

それがお役に立てば幸いです。詳細については、私の本、 AsyncJavaScriptをチェックしてください。

于 2012-07-08T14:55:30.220 に答える
17

IcedCoffeeScriptはここにとどまると思います。

私はそれを無期限にサポートすることを計画しており、メインラインに対してパッチを適用するのはかなり定期的です。私はほとんどすべての個人プロジェクトでこれを使用しており、一般リリースが間近に迫っているOkCupid LabsプロジェクトであるサイトCombosaurus.comは、 IcedCoffeeScriptで記述されています。

于 2013-01-15T15:58:22.283 に答える
4

標準のイベントコールバック、pub sub、およびdeferredの違いについてブログに投稿しました。これは、役立つ可能性があります。

イベントエミッター、Pub Sub、またはDeferred Promises…どちらを選択する必要がありますか?

イントロには次のように書かれています。

「イベントエミッター、Pub Sub、またはDeferred / Promisesのいずれを選択するか」という質問に対する明白な答えは、それが何をしているかに依存するということです。

この投稿では、各パターンが(非常に)基本的な実装でどのように機能するかについて少し調べてから、どちらかを選択する理由を見ていきます。

そして要約は次のとおりです。

イベントエミッターは本当に古典的であり、良い習慣と起こることの制御を可能にします。Pub Subは、コンポーネント間のイベントに対してより柔軟です。DeferredとPromisesは、コールバックを処理するための強力な方法を提供します。

要約をあなたの問題に適用する-私は、延期された約束と約束がおそらくあなたを大いに助けるであろうことを提案するでしょう。

あなたのことはわかりませんが、Deferredをどのように実装するかについて頭を悩ませることで、Deferredの使用の複雑さを理解するのに本当に役立ちました。投稿にもいくつかのサンプルコードを含めました。これは(非常に)単純なので、他の誰かのより堅牢な試みを検討するときに役立つ可能性があります。

于 2012-10-02T09:05:43.557 に答える
2

ああ、私は間違いなくIcedCoffeeScriptに依存します。CoffeeScript構文が好きで使用している場合は、それが自然に「ブレンド」されていることがわかります...

プロジェクトの将来については、しばらく前に同じジレンマがありましたが、Maxwell Krohnが積極的にそれを維持しており、コミュニティとその周りの認識が高まっているようです(まあ、まだスタックオーバーフローではないかもしれません)。

昨年使い始めましたが、今ではとなしawaitで「実際の」アプリをコーディングすることは想像もできませんでしdeferた。

ICSを使用したエレガントな非同期制御フローに関する簡単な「ヒント」はここにあります。また、 ICSについて言及している一般的なWebプロジェクトでのNode.jsの使用に関する5部構成の皮肉なタイトルの記事も書きました。

于 2013-09-30T14:20:23.700 に答える