私はちょうどMDNのプロミスについて読んだことがあります。構文を理解することはできますが、なぜそれが必要なのかはわかりません。JSでプロミスが必要なのはなぜですか
Promiseを使用してのみ行うことができる特定のケースはありますか?それとも、よりクリーンなコードを書く方法ですか?
私はちょうどMDNのプロミスについて読んだことがあります。構文を理解することはできますが、なぜそれが必要なのかはわかりません。JSでプロミスが必要なのはなぜですか
Promiseを使用してのみ行うことができる特定のケースはありますか?それとも、よりクリーンなコードを書く方法ですか?
プロミスオブジェクトは、非同期機能を実行するために使用されます。 MDNドキュメントの1行目から
:
プロミスオブジェクトは、非同期計算のために使用されます。プロミスはまだ完了していないが、将来的に期待される単一の非同期操作を表します。
問題はMDNの例であり、他の場所はそのように書く必要はないようです。より洗練されたコードを書くのであれば、私は理解できます。後ろに隠された有用なものがあるかどうかは分かりません。 – Hp93
約束は、よりクリーンなコードを書くが、コールバック地獄を減らす(または完全に取り除く)能力を与える。
さらに、コールバックは、async functions
のように、ES2017で提供されるいくつかの新しい構文機能のバックボーンであり、より洗練されたコードを書くことができます。
3つ目のことは、自動エラー処理の構文を初めて学ぶときにすぐには分かりません。約束は、エラーをチェーンに伝え、手作業によるエラー処理のレイヤーを設けることなく、共通の場所で処理することができます。
単なる書き込みクリーナーコードです。これを見て:
https://www.npmjs.com/package/q
それは言う:最初のパスで
を、約束は「ドゥームのピラミッド」を軽減することができます。コードは右に行進状況はより速く、それは前方行進より。
Promiseオブジェクトは非同期計算に使用されます。 Promise は、まだ完了していない単一の非同期操作を表します。 が将来予想されます。
ここは例です。非同期的に、他のすべてのコードが実行した後、我々は約束を取り付けたハンドラが実際に呼び出されたことを、
まず:あなたはこの例では、二つのことを図解するここhttp://jsbin.com/yumapi/5/edit?html,js,output
function dieToss() {
return Math.floor(Math.random() * 6) + 1;
}
console.log('1');
var promise = new RSVP.Promise(function(fulfill, reject) {
var n = dieToss();
if (n === 6) {
fulfill(n);
} else {
reject(n);
}
console.log('2');
});
promise.then(function(toss) {
console.log('Yay, threw a ' + toss + '.');
}, function(toss) {
console.log('Oh, noes, threw a ' + toss + '.');
});
console.log('3');
それを実行することができます。
第2に、フルフィルメントハンドラは、それが解決された値(この場合は、サイコロの結果)とともに、約束が満たされたときにのみ呼び出されたということです。拒否ハンドラについても同様です。
のMozillaのクレジットとToptotal
こんにちは、私は構文の仕組みを理解しています。例だけでは、ツールを使用する良い例は示されていません。あなたの例のように、_fulfill()_と_reject()_を2つの_console.log_行で置き換えて、同じ結果を得ることができます。 – Hp93
あなたはそれを必要としません。このようなケースや非同期リクエストのために作られたものです。彼らが約束を使用するときに他の人々のコードを理解できる限り、あなたが現在の方法を使用するならば、その罰金。 –
それが助けてくれたら教えてください! –
機能JSでそれが不可欠であるので、我々がそれを必要とします。 – Redu
「標準」JavaScriptでは実行できない約束を使用して行うことはできません。これは、非同期アクションよりもはるかに強力な抽象化であり、結果としてよりクリーンなコードになります。それでも、完全にオプションです。 – m90
また、入れ子のレイヤーが1つしかない場合は、コールバックを使用する方が簡単だと思います。 –