[解決済み】JavaScriptのDeferred、Promise、Futureの違いは何ですか?
質問
Deferreds、Promise、Futuresの違いは何ですか?
この3つには、一般的に認められた理論があるのでしょうか?
解決方法は?
私がOPの質問に答えようとした方法について、明らかに不愉快に思っていることを考慮に入れて。文字通りの答えは、プロミスは他のオブジェクトと共有されるものであり、ディファードはプライベートに保たれるべきものであるということです。主に、遅延(一般にPromiseを拡張したもの)は自己解決することができますが、promiseはそうすることができないかもしれません。
細かいことにこだわるなら プロミス/A+(エープラス .
私が知る限り、その包括的な目的は、標準化されたインターフェイスによって明確性を向上させ、結合を緩めることです。参照 参考文献 jfriend00 さんより。
関数に直接コールバックを渡すよりも プロミスを使用することで、インターフェイスを密結合にすることができます。 同期と非同期のコードに対する懸念を分離することができます。
個人的には、deferredは、例えば、非同期リクエストによって入力されるテンプレート、依存関係のネットワークを持つスクリプトのロード、ノンブロッキングでフォームデータに対するユーザーフィードバックを提供する場合などに特に有用であると感じています。
確かに、CodeMirrorをJSモードで非同期に読み込んだ後に何かを行う純粋なコールバック形式を比較すると(申し訳ありませんが、私はjQueryを使ったことがありません。 間 ):
/* assume getScript has signature like: function (path, callback, context)
and listens to onload && onreadystatechange */
$(function () {
getScript('path/to/CodeMirror', getJSMode);
// onreadystate is not reliable for callback args.
function getJSMode() {
getScript('path/to/CodeMirror/mode/javascript/javascript.js',
ourAwesomeScript);
};
function ourAwesomeScript() {
console.log("CodeMirror is awesome, but I'm too impatient.");
};
});
約束されたバージョンに(また、申し訳ありませんが、私はjQueryの最新のものではありません)。
/* Assume getScript returns a promise object */
$(function () {
$.when(
getScript('path/to/CodeMirror'),
getScript('path/to/CodeMirror/mode/javascript/javascript.js')
).then(function () {
console.log("CodeMirror is awesome, but I'm too impatient.");
});
});
半擬似的なコードで申し訳ありませんが、これで核となる考え方がいくらか明確になるかと思います。基本的には、標準化されたプロミスを返すことで、プロミスを受け渡しすることができ、その結果、より明確なグループ分けが可能になります。
関連
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み】JavaScript版sleep()とは?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】BootstrapのCollapseが折りたたまれない
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]
-
[解決済み】中央値の計算 - javascript
-
[解決済み] 繰延べと約束
-
[解決済み] 関数内で変数を変更した後、変数が変更されないのはなぜですか?- 非同期コードリファレンス