ジャバスクリプトはカジノでギャンブルによって説明される
16005 ワード
ギャンブルやギャンブルについての映画を見たことがある場合は、JavaScriptで約束を理解することができます.
JavaScriptの非同期機能が大好きです.実際には、私たちは非常に多くのことが時々、私たちを無視します.そして、“pyramid of doom”のようなコードを取得します.
Image Credit
これは一般的に「コールバック地獄」として知られています.なぜなら、おそらくそのコードを再読み込みしたくないし、どのように動作しているのか、どのようなシーケンスで動作するのかを理解しようとするからです.実際、あなたのチームの誰もしません.
上の例にはいくつかのことが難しいです.エラー処理が不明瞭です.何かが間違っている場合はどうなりますか? 各関数は前の関数に依存します.非同期式を必要としません.あなたは他のコードを読んで注文を明確にしたい.この多くの関数をチェーン化すると、同期式のコードが読みやすくなります. あなたは継続的に関数の入力のための変数を追跡し、出力する必要があります.また、各出力に発生するロジックを追跡します.これが疲れる. この全体のプロセスを約束を使用して理解することができます.あなたが私のようであるならば、あなたは一度か二度約束を聞いたかもしれません、しかし、彼らが混乱しているようだったので、それから彼らを無視しました.あなたがコールバックを理解するならば、約束の基本的な用途は実際に非常に簡単です.
明確なコードを記述し、頭痛なしですべてのステップを理解できるようになります簡単な、単一目的の機能をお約束します.しばらく考えた後、私は約束はカジノへの旅行のようだと気づいた.一方、カジノはあなたの銀行口座(AHEM、削除)のお金の量を変更すると、約束の連鎖は、特定のシーケンス内のデータを変更します.
それで、それに飛び込みましょう.あなたがコールバックで経験がないならば、my explanation on the principles of callbacksをチェックしてください.あなたが約束のより技術的な説明を探しているならば、this guideまたはthis guideまたはチェックアウトしてください.
あなたがカジノに週末休暇をとっていると言いましょう.あなたはあなたのポケットに給料の2週間を持って、あなたはそれを賭けるように、すべての瞬間を楽しむには、最後のダイムにダウンします.それとも、幸運を取得し、お金を獲得終了?
あなたのホテルの部屋にして、カジノに頭を取得します.ゲームの各タイプは現金を受け入れるので、あなたは1000ドルを撤回し始めるためにATMに行く必要があります.
一歩踏み出してこのシナリオを考えましょう.現金はカジノの外の何かのために使用することができますが、それはあなたがお金を使い果たす前に残っているゲームの数-内部の1つのことを意味します.そのキャッシュ量は、週末のコースの上でさらにさらに縮小するでしょう.また、成長することができますが、あなたはすでにあなたがこの週末1000ドル以上失うことはありません自分自身を約束している.
あなたの残りのお金の量は、上記の図のゲームからゲームに渡される方法に注意してください?
約束は、まだ存在しない価値の場所を保持しますが、将来確かに存在します.これは明らかに機能に従って、その始まりと終わりを理解することができます.上記のように、約束は連続的な非同期機能に明快さを与えて、入力と出力をはっきりさせるすばらしい方法です.
約束は、1つの非同期機能の製品を直接次の機能に渡します.前の関数が値を返すとすぐに、その関数は始まります.または、エラーを返すと、別の関数を実行します.私たちは後でその偶発性をカバーすることができます.
実際には生産者と消費者の2種類の約束があります.
生産者はチェーンの最初の約束です、一方、消費者はチェーンの前の約束から結果を待ちます.この場合、ATMに行くことは生産者です.
また、約束は3つの州のいずれかを持つことができます.
未定の -まだ完了していない 満たされる -見込みは完了して、価値 を返しましたは拒否されました-約束はエラーで失敗しました. それで、あなたがATMを訪問して、あなたが意図した操作を完了することができないならば、...$ 1000を正常に引き出すと、値を返しました.
では、これをコード化しましょう.これが約束構文です.
行1 - 2つの可能な結果で約束を宣言します
第2行- ATMからお金を引き出す機能
行3 - VisiTatm関数から値を設定した状態を返す
他の非同期コードと同様に、このアプローチでは、コードがVisutatm関数の状態で待機できます.が完了していない場合は継続するポイントはありません!
あなたがカジノにいる間、スロット、ポーカー、ルーレットをプレイしたいと仮定しましょう.一人一人が現金経由で購入する必要があります.もちろん、ポーカーであまりにも多くのお金を賭けて実行すると、次のいずれかのゲームをプレイすることができなくなります.
のは、スロットを最初に再生したいとしましょう.
それで、我々が使用する次の約束を始めるとき.next ()は、以前の結果に対応する引数の量を示します.
つの他の重要な注意-プレイスロットは、構成された機能です.我々は、それは2つの引数-あなたが持っているお金の総量、およびギャンブルを気にしている額の2つの引数を取る想像している.
この約束のチェーンに別のステップを追加しましょう-ポーカーのゲーム.それは同様にスロットマシンの約束に動作します.我々は、我々がこれの中で望む限り、我々を賭けます.
この部分のコード図を示します.
我々が今我々のすべてのお金を賭博したと想像しましょう.我々は当初より多くのゲームをプレイするつもりだったが、我々はお金が残っている.この鎖にはさらに約束があるかもしれませんが、解決できません.
代わりに、私たちはポーカーの後に残った$ 0を持っているので、この約束はエラーをスローします.それはまだ解決されます、しかし、拒絶された状態で.
これはどこです.catch ()メソッドは便利です.キャッチは、我々の約束のチェーンで発生する可能性のあるエラーを処理することができます.それぞれのコールバックにエラーハンドラを書く必要はありません.
あなたがあなたのすべてのお金を賭博したとき、あなたがまっすぐバーに向かうと想像しましょう.ここでは、コードでどのように見えます.
これまでのところ、我々の約束は数を返しただけだ.しかし、それらはチェーンに沿った他のタイプのデータを渡すこともできます.
あなたがスロットマシンをプレイし、いくつかのお金を獲得想像してみましょう.スロットマシンはまっすぐ現金を与えることはありません-それはあなたが後で償還することができますチケットを与える.これはticket-in, ticket-out systemと呼ばれている.
今、あなたはチェーン上の2つの値を追跡する必要があります-手に現金の量、およびあなたのチケットの値.オブジェクトはこの状況で最もよく働くでしょう.
あなたがスロットをプレーしたチェーンの2番目の約束を変更しましょう.
ポーカーテーブルのみチップの現金を受け入れるので、次の約束でそのプロパティを使用する必要があります.
私はポーカーゲームで現金値を使用しました.しかし、最後に、私はまだチェーンに沿ってそれを渡すために、最終的なオブジェクトにチケット価値を加える必要があります.さもないと、私は賞金をなくしただろう. SlotResultsは、そのオブジェクトが名前を持っていなくても、前の約束からオブジェクトを含んでいます.
あなたはこの説明を楽しんだか.HTML、CSSとJavaScriptの最新の視覚化されたチュートリアルを得るために、CodeAnalogies blogをチェックしてください.
JavaScriptの非同期機能が大好きです.実際には、私たちは非常に多くのことが時々、私たちを無視します.そして、“pyramid of doom”のようなコードを取得します.
Image Credit
これは一般的に「コールバック地獄」として知られています.なぜなら、おそらくそのコードを再読み込みしたくないし、どのように動作しているのか、どのようなシーケンスで動作するのかを理解しようとするからです.実際、あなたのチームの誰もしません.
上の例にはいくつかのことが難しいです.
明確なコードを記述し、頭痛なしですべてのステップを理解できるようになります簡単な、単一目的の機能をお約束します.しばらく考えた後、私は約束はカジノへの旅行のようだと気づいた.一方、カジノはあなたの銀行口座(AHEM、削除)のお金の量を変更すると、約束の連鎖は、特定のシーケンス内のデータを変更します.
それで、それに飛び込みましょう.あなたがコールバックで経験がないならば、my explanation on the principles of callbacksをチェックしてください.あなたが約束のより技術的な説明を探しているならば、this guideまたはthis guideまたはチェックアウトしてください.
約束は何ですか。
あなたがカジノに週末休暇をとっていると言いましょう.あなたはあなたのポケットに給料の2週間を持って、あなたはそれを賭けるように、すべての瞬間を楽しむには、最後のダイムにダウンします.それとも、幸運を取得し、お金を獲得終了?
あなたのホテルの部屋にして、カジノに頭を取得します.ゲームの各タイプは現金を受け入れるので、あなたは1000ドルを撤回し始めるためにATMに行く必要があります.
一歩踏み出してこのシナリオを考えましょう.現金はカジノの外の何かのために使用することができますが、それはあなたがお金を使い果たす前に残っているゲームの数-内部の1つのことを意味します.そのキャッシュ量は、週末のコースの上でさらにさらに縮小するでしょう.また、成長することができますが、あなたはすでにあなたがこの週末1000ドル以上失うことはありません自分自身を約束している.
あなたの残りのお金の量は、上記の図のゲームからゲームに渡される方法に注意してください?
約束は、まだ存在しない価値の場所を保持しますが、将来確かに存在します.これは明らかに機能に従って、その始まりと終わりを理解することができます.上記のように、約束は連続的な非同期機能に明快さを与えて、入力と出力をはっきりさせるすばらしい方法です.
約束は、1つの非同期機能の製品を直接次の機能に渡します.前の関数が値を返すとすぐに、その関数は始まります.または、エラーを返すと、別の関数を実行します.私たちは後でその偶発性をカバーすることができます.
あなたの最初の約束を作成する
実際には生産者と消費者の2種類の約束があります.
生産者はチェーンの最初の約束です、一方、消費者はチェーンの前の約束から結果を待ちます.この場合、ATMに行くことは生産者です.
また、約束は3つの州のいずれかを持つことができます.
未定の
では、これをコード化しましょう.これが約束構文です.
let withdraw = new Promise(function(resolve,reject){
let amount = visitATM(1000);
return resolve(amount)
});
そして、そのコードの行ごとの説明です.行1 - 2つの可能な結果で約束を宣言します
第2行- ATMからお金を引き出す機能
行3 - VisiTatm関数から値を設定した状態を返す
他の非同期コードと同様に、このアプローチでは、コードがVisutatm関数の状態で待機できます.が完了していない場合は継続するポイントはありません!
複数約束の連鎖
あなたがカジノにいる間、スロット、ポーカー、ルーレットをプレイしたいと仮定しましょう.一人一人が現金経由で購入する必要があります.もちろん、ポーカーであまりにも多くのお金を賭けて実行すると、次のいずれかのゲームをプレイすることができなくなります.
のは、スロットを最初に再生したいとしましょう.
let withdraw = new Promise(function(resolve,reject){
let amount = visitATM(1000);
return resolve(amount)
});
withdraw.then(function(amount){
let slotResults = playSlots(amount, 100);
if(slotResults <= 0)
throw err;
return slotResults;
});
約束を使用します.次に、前の約束の後に何が起こるかを示す構文を解決します.この場合、withdraw見込みの最終結果は量の範囲内で含まれる.それで、我々が使用する次の約束を始めるとき.next ()は、以前の結果に対応する引数の量を示します.
つの他の重要な注意-プレイスロットは、構成された機能です.我々は、それは2つの引数-あなたが持っているお金の総量、およびギャンブルを気にしている額の2つの引数を取る想像している.
この約束のチェーンに別のステップを追加しましょう-ポーカーのゲーム.それは同様にスロットマシンの約束に動作します.我々は、我々がこれの中で望む限り、我々を賭けます.
withdraw.then(function(amount){
let slotResults = playSlots(amount, 100);
if(slotResults <= 0)
throw err;
return slotResults;
})
.then(function(slotResults){
let pokerResults = playPoker(slotResults);
if(pokerResults <= 0)
throw err;
return pokerResults;
})
だから、我々は、ポーカーゲームにスロットマシンをプレイした後、現金が残ってフィード.あなたが私に尋ねるならば、かなり積極的です.この部分のコード図を示します.
我々が今我々のすべてのお金を賭博したと想像しましょう.我々は当初より多くのゲームをプレイするつもりだったが、我々はお金が残っている.この鎖にはさらに約束があるかもしれませんが、解決できません.
代わりに、私たちはポーカーの後に残った$ 0を持っているので、この約束はエラーをスローします.それはまだ解決されます、しかし、拒絶された状態で.
これはどこです.catch ()メソッドは便利です.キャッチは、我々の約束のチェーンで発生する可能性のあるエラーを処理することができます.それぞれのコールバックにエラーハンドラを書く必要はありません.
あなたがあなたのすべてのお金を賭博したとき、あなたがまっすぐバーに向かうと想像しましょう.ここでは、コードでどのように見えます.
withdraw.then(function(amount){
let slotResults = playSlots(amount, 100);
if(slotResults <= 0)
throw err;
return slotResults;
})
.then(function(slotResults){
let pokerResults = playPoker(slotResults);
if(pokerResults <= 0)
throw err;
return pokerResults;
})
.catch(function(e){
goToBar();
});
このキャッチフレーズは、どの約束が拒否されるかに関係なく動作します.約束内のオブジェクトの使用
これまでのところ、我々の約束は数を返しただけだ.しかし、それらはチェーンに沿った他のタイプのデータを渡すこともできます.
あなたがスロットマシンをプレイし、いくつかのお金を獲得想像してみましょう.スロットマシンはまっすぐ現金を与えることはありません-それはあなたが後で償還することができますチケットを与える.これはticket-in, ticket-out systemと呼ばれている.
今、あなたはチェーン上の2つの値を追跡する必要があります-手に現金の量、およびあなたのチケットの値.オブジェクトはこの状況で最もよく働くでしょう.
あなたがスロットをプレーしたチェーンの2番目の約束を変更しましょう.
withdraw.then(function(amount){
let ticketValue = playSlots(amount, 100);
if(ticketValue <= 0)
throw err;
return {tickets: ticketValue, cash: amount};
});
現在、2つのプロパティを持つオブジェクトを返します.以下のようになります.ポーカーテーブルのみチップの現金を受け入れるので、次の約束でそのプロパティを使用する必要があります.
withdraw.then(function(amount){
let ticketValue = playSlots(amount, 100);
if(ticketValue <= 0)
throw err;
return {tickets: ticketValue, cash: amount};
})
.then(function(slotResults){
let pokerResults = playPoker(slotResults.cash);
if(pokerResults <= 0)
throw err;
return {tickets: slotResults.tickets, cash: pokerResults};
})
.catch(function(e){
goToBar();
});
いくつかのことに注意してください.最新のチュートリアル
あなたはこの説明を楽しんだか.HTML、CSSとJavaScriptの最新の視覚化されたチュートリアルを得るために、CodeAnalogies blogをチェックしてください.
Reference
この問題について(ジャバスクリプトはカジノでギャンブルによって説明される), 我々は、より多くの情報をここで見つけました https://dev.to/kbk0125/javascript-promises-explained-by-gambling-at-a-casino-4jdoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol