スローするのは悪です。スローしてはいけません。スローしてはいけません。コールバックが呼ばれると、最初の引数はエラーかnullになります。エラーであれば、それを処理するか、それを処理するコールバックに渡します。エラーをコールバックに渡して、エラーが発生したことを知らせましょう。ええ、このスタイルはflow-jsから直接インスパイアされたものです。これが最初に思い浮かんだ解決策でした。Mix氏のNarrativeJS、TwistedとDojoのDeferred実装、その他ライブラリの影響を受けています。私はF#やRxを使ったことがないので、これらプロジェクトとの関係にコメントする資格はありませんね。Underscore.jsからはインスピレーションを受けました。これはJavaScriptのための優れた関数プログラミングライブラリです。Underscore.jsにおいてイテレータを使うほとんどの関数は、Asyncライブラリでコールバックを受け取って非同期に動作するようアップデートされています。APIのチェーン文字はjQueryの影響を受けています。私の目標のひとつは、jQueryライクなAPIをnode.jsのファイルシステムモジュールに提供することです。ひとつ大きな影響を受けたのは、pythonスタイルのジェネレータです。チェーンの各要素が値を生成し、それは続くチェーン要素によって使われます。全体動作はチェーンの最後の要素によってトリガーされます。これはチェーン全体の値を「プルする」ことになります。この意味で、async.jsは、値がソースからプッシュされるjQueryやRxとは違っています。このプルシステムは、すべての値をあとで遅延計算することを可能にし、無限の値(例えば、すべての偶数など)を生成するジェネレータを実現可能にします。いいえ、当初はなかったですね。私はFacebookとAmazonを使ったマッシュアップのサイトを作っていました。最初の試みは失敗に終わりました。2つのリソースから作られたモデルをどう扱えばよいのか、理解していなかったのです。(実は当時はJavaScriptのことをよく知りませんでした。"WTFJS"を見ながら試行錯誤して、プレーンなDOMを簡単にするのに少しjQueryを使っていた程度です)。私は、必要なときにデータが存在すると想定して、あるデータセットを非同期に処理するときだけチェーンにあるものをすべてリファクタリングするよりも、どんなデータも必ず取得するのにある程度の時間がかかかると想定した方が簡単だということがわかりました。私は試してみて、失敗して、いろいろな方法を使って半分は成功しました。それから、幸運なことに、私のローカルなJavaScriptユーザーグループリストの人がCrockford氏のJS講座に触れました。私はそれを全部見て(3章については少なくとも3回は見ました)、非同期プログラミングの「問題」(あるいは、むしろチャンス)をどうすればよいか、ようやく理解できました。Crockfords氏のスライドを見つけて、基本的なポイントとして提供してくれていたpromiseの例を始めました。そのあと、Node.JSで遊び始めました。それが自分のエラー処理戦略を変えたときです(しかし、数日前までドキュメントには反映されていませんでした)。2.0では、ブラウザのためにNode.JSのEventEmitterもバンドルします。コールバックのためにNode.JSで使われるようになったパターンにインスパイアされたかな。私は一貫性にうるさい人間です。いうのも、1つ(調子のいい日で、コーヒーがたくさんあれば、おそらく2つ)以上のやり方を覚えられるほど賢くないからです。ないと、本当に困惑して、トイレだと思ってクローゼットに歩いて、コート全部にXXXの臭いを残して...、ほら、わかるでしょ。どこでもやっていることです。関数は最後の引数としてコールバックをとります。コールバックは最初の引数としてエラーか、うまく動いていればnull/undefinedを受けとります。Slideにはいくつかのヘルパー関数があって、このパターンが簡単に使えます。言語のセマンティックスに大きな変更をしない限り、ないでしょうね。coffeescriptのようなプリプロセッサは、シンタックスには役立ちますが、たいていの場合、素のJavaScriptにこだわる方がよいと思っています。1.9のファイバのようなものが必要だと思っています。次のプロジェクトのために、かなり時間をかけてNode.jsを検討しましたが、いつか非同期プログラミングは頭を混乱させます。これを何とかするツールはたくさんありますが、助けにはなりませんでした。Flow-JSのようなライブラリが多数存在するということは、実際のところJavaScriptは並列プログラミングに向いていないことを示しているように感じています。JavaScriptエンジンの修正を回避することでだったのは知っていますが、Asanaの人によると、ファイバを追加するのはそんなに問題はないようです。continuationsに関する議論があります。ジェネレータのように、分岐やループのフローを複雑にするコールバックを不要にできます。promiseと組み合わせて使うことで、極めてシンプルで読みやすい非同期コードが作れます。それから、ひとつ言っておきたいことがあります。node-promiseライブラリはhttp://wiki.commonjs.org/wiki/Promises/A仕様も実装しています。Dojoやおそらく将来のjQueryのpromiseと互換性があります。Asyncライブラリは、言語の大部分がそのままになるよう設計されました。それに合うように、JavaScript上に新しい言語を実装しようとはしていません。1.7へのyieldの追加は将来のプロジェクトで興味深い応用があるんじゃないかと思っています。yieldを使えば、Twistedにあるような機能を同期のようなコーディングスタイルでJavaScriptに移植できるかもしれません。私の同僚がWhorlで調べていましたが、今は中断しているようです。Mozillaによってサポートされるジェネレータとイテレータの標準化は、async.jsのコードをもっと簡潔にして、こうした問題を単純化してくれます。ライブラリでたくさんコードが繰り返されているのは、同じコードがブラウザとNode.JSで動くようにするためのごまかしです。この問題を解決しようと、いくつかのライブラリ(teleportなど)が出てきているのは知っていますが、まだどれも試していません。非同期のrequireが言語に組み込まれれば、間違いなくすばらしいことでしょう。JavaScriptほど本質的に非同期性を備えた言語は、組み込みのFuturesのようなものを持つべきだと思ってます。CommonJSはサーバーサイドPromiseの標準化についていくつかの提案をしていますが、彼らはデータプライバシーを重視しています。Futuresはコントロールフロー、開発者の使いやすさ、ブラウザ互換性を重視しています。私のフローコントロールがベストです。だれも改善なんてできません。これがベストなのは私自身に直接かかわっているからです。外部の影響というのは私にとってはマイナスで、ベストではなくなるのです。私と同じ経験をしたいなら、フローコントロールライブラリを書くことをおすすめします。自分で書けばすぐにそれがベストだとわかるでしょう。他のライブラリの方がよさそうに見えたなら、大急ぎでエディターに戻って、恥を隠して、すぐに彼らのアイデアを自分自身の少し違ったやり方で再発明しましょう。すれば、今やそれがベストなのだと実感できるでしょう。JavaScriptについて、詳しくはInfoQを見てみましょう。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員��して、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。