問題タブ [es6-promise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - promise チェーンの値を後続のハンドラに渡す
次のコードを検討してください。
sendMessage*()
どちらの関数もソケットをパラメーターとして受け入れることに注意してください。ただし、最初のものだけが から解決された値を取得するため、これを取得するのは最初のものだけopenSocket()
です。
外部スコープで変数を使用することで、これを回避できます。つまり、ソケットが解決されたらソケットを割り当て、それを で使用できますsendMessage2()
が、少しハックで汚いようです。
また、 Q に関するこの回答で説明されているように、いくつかのライブラリサポートを使用できることも知っています。
このコードを設計する標準的な方法を探しています。
- 外側のスコープに変数は必要ありません
- サードパーティの promise ライブラリに依存しない (ES6 の promise に基づく必要があります)
それを達成する方法はありますか?それとも、コードをリファクタリングして簡単にする方がよいのでしょうか?
javascript - 任意のサードパーティ モジュールとの約束
私はまだ Promise に慣れていません ( jQuery ではなくPromises/A+のように)、古いクライアント側のコードの一部を Promise を返すように変換して、特にコールバックをアップストリームに渡す代わりにダウンストリームを使用できるようにしたいと考えています。 、Web ストレージと AJAX に関するすべて。
問題は、私が使用している AJAX ライブラリ ( Oboe.then
) です。jQuery スタイルの API がありますが、メソッドはありません。つまり、自分自身を構築して返す必要new Promise
がありますが、次のアプローチは最適ですか? 関数をラップせずにstaticPromise.resolve
を使用して何かを行うことはできますか? Promise.reject
私の例は次のとおりです。
古いコード
新しいコード
より良いコード?
(ネイティブの Promise と polyfill のみを使用してこれを行うつもりですが、これに対するヘルパーを備えたライブラリがあれば、それらの実装を見て喜んでいます。)
javascript - JavaScriptの約束をデバッグするには?
promise に基づく非同期コードをデバッグする方法を理解しようとしています。Promises とは ECMAScript 6 ベースの promise を意味し、デバッグとは組み込みの chrome または firefox デバッガーを使用することを意味します。
私が問題を抱えているのは、エラーが発生したときに、どのように「拒否」してもスタックトレースを取得できないように見えることです。
私はこれらを試しました:
しかし、それらのどれも、コードまたはスタック トレースで実際のエラーを返しません。
だから私の質問は - javascript Promises を適切にデバッグする方法は?
javascript - なぜconsole.errorは関数ではなくメソッドなのですか?
最近はES6 Promisesを多用しています。onRejected
そのため、関数を指定しないと、例外を追跡できなくなります。
catch()
を使用して数バイトを追加して、例外がコンソールに表示されるようにすることができれば、非常に便利です。
console.error
残念ながら、関数ではなくメソッドであるため、これは機能しません。つまり、console
を呼び出すときにレシーバー を指定する必要がありますconsole.error()
。これは、ブラウザ コンソールで簡単に確認できます。
これは、私のcatch()
ハンドラーを追加することはもう少し冗長であることを意味します:
確かに、ES6 では少し改善されています。
ただし、余分な入力は避けたほうがよいでしょう。さらに悪いことに、catch(console.error)
今日使用すると、例外が黙って無視されます。これは、まさに解決しようとしている問題です! console.error()
メソッドである必要がある仕組みの基本的なものはありますか?
promise - ネイティブ Promise を使用して Promise キューを実装していますか?
@kriskowal による優れた記事「A General Theory of Reactivity 」を参照してください。その中で、彼は Q 規則を使用して、promise キューの次の実装を提供します。
defer
やなどの Q 機能を使用していることがわかりますget
。これをネイティブの約束を使用するように適応させる方法を先にまとめようとしていますが、大規模な脳のフリーズが発生しています。(これに取り組んでいる過程で、Chrome がPromise.defer
仕様にない方法を提供しているように見えるという事実にも遭遇しました。)
誰か助けてくれませんか?