promiseコンストラクターはそのような例外をキャッチし、それらを拒否に変換します。つまり、promiseを使用した同期例外と非同期例外を心配する必要はありません。
JavaScriptには 1ショットスイッチ、1または0、
したがって、関数は あなたの場合、式 は これを修正するには、実際にこのように生成された値を返すことができます 私はBluebirdのコルーチンを次のように使用しようとしています。 ここで間違っているのは何ですか? あなたのコードから始めましょう:) d(1)を実行すると、ブルーバードのコルーチンはそれを魔法にし、約束関数p.resolve(v)を評価します。 さて、コルーチンの働きは、約束関数を呼び出して実際の歩留まりを実行することです。つまり、得られた約束を実行した後、実際のジェネレータに戻ります。 今度のyieldは、約束の場合に 'then'の値を取得するために使用できるresolve関数とは異なり、値を返すためのものではありません。 したがって、値は返されないため、未定義になります。 あなたができることは2つあります: まず降伏値を明示的に返します。 これはpromiseの実行によって得られた 'yield'で得られた値を返すので、 'then'を使って値を取得できます。 好きな しかし、あなたが他のものを持っていれば、何を得られるかを約束してください。 つまり、次のようなものです: ここで戻り値を実行すると、別のyield関数は実行されません。つまり、上記のコードの最初のyield値で返された場合、最初のyield後のコードは実行されません。 ですから、私ができることの1つは、そこにある与えられた約束の「当時」を扱うことです: そして、これは何の約束もなしに行うことができます。 デモコードを以下に示します。 このようにして、ブルーバードで約束を達成し、それぞれの「当時」で解決された値を取得し、解決されたデータを処理することができます。 さらに、すべての開発者がpromiseコンストラクターが行わない場所について学習する必要がある追加の型も必要でしたが、これは非常に便利です。 then (function (v){console. APIは次のようになりました。 javascript - 同期 - promise return . 通常、非遅延APIをプロミスに変換するには、遅延オブジェクトとプロミスコンストラクターを使用します。 ブルーバードコルーチンの使用 (2) 私はBluebirdのコルーチンを次のように使用しようとしています。 var p = require ('bluebird'); //this should return a promise resolved to value 'v' var d = p. coroutine (function *(v) {yield p. resolve (v);}); //however this prints 'undefined' d (1). ログインして、MDNアカウントの特典をお楽しみください。アカウントを作成していない場合は、ログイン後、作成を促されます。 (常に「次のティック」でコールバックを実行することにより、反対側であなたを守ります)。
前回で JavaScript のスコープの基本がわかったので、今回はスコープチェーンとクロージャを勉強してみました。 Call オブジェクトとクロージャの理解がかなり大変でした・・。 変数オブジェクト JavaScript で変数の宣言と参照をするということは、変数オブジェクトを読み書きするということです。 変数オブジ… 続いてJavaScriptの部分を見ていきたいと思います。 最初に変数timer1,timer2を宣言しています。 グローバル変数にしているのは、 複数の関数でtimer1,timer2を使うからです。 timer1はsetInterval()タイマーを格納します。timer2がsetTimeout()となります。 続いてJavaScriptの部分を見ていきたいと思います。 最初に変数timer1,timer2を宣言しています。 グローバル変数にしているのは、 複数の関数でtimer1,timer2を使うからです。 timer1はsetInterval()タイマーを格納します。timer2がsetTimeout()となります。 今まで、この「細切れに処理する」という操作は、JavaScriptが苦手とする分野でした。しかしモダンブラウザに導入されつつある Streams APIの登場によって、この状況は変わろうとしています。 データを細切れに扱うStreams API. Promiseコンストラクターはその内部機能を公開しているため、これを公開コンストラクターパターンと呼びますが、問題のプロミスを構築するコードに対してのみです。 大前提として、JavaScriptはシングルスレッドで動いています。 これはつまり、JavaScriptは並行処理はできないということです。
質問失礼致します。 現在、JavaScriptにて以下処理を実装しようとしています。1、親画面から子画面を開く2、子画面を閉じる3、子画面が閉じたことにより、親画面の関数が実行される var win = window.open('', 'child', 'height=100,width=100 C のような低水準言語は、プログラミング言語に関係なく、メモリーのライフサイクルはほぼいつも同じです:2 に関してはすべての言語で明示的に行われます。1 と 3 は低水準の言語では明示的ですが、JavaScript のような高水準言語では、ほとんどの場合暗黙的に行われます。割り当てでプログラマを悩まさないために、JavaScript では値を宣言したときと同時にメモリーの割り当ても行われます。一部の関数呼び出しでは、オブジェクトの割り当てが発生します。いくつかのメソッドは、新しい値またはオブジェクトを割り当てます:値を使用することは、基本的に割り当てられたメモリーで読み書きすることを意味します。これは変数やオブジェクトの値を読み書きすることや引数を関数に渡すことによって行われます。メモリー管理の問題のほとんどは、この段階に来ます。ここで最も難しい作業は、「割り当てられたメモリーは、もはや必要とされていない」ときを発見することです。プログラム内のどこで、そのようなメモリーの断片が不要になって解放する必要があるかを決定するには、開発者による判断が必要なことが多いです。高水準言語には、仕事がメモリー割当てを追跡することである「ガベージコレクタ」と呼ばれるソフトウェアを埋め込み、割り当てられたメモリーの一部がもはや、その場合に必要とされていないときに見つけるために使用し、それが自動的に解放されます。メモリーの一部のピースが必要とされているかどうかを知ることの一般的な問題は上述の通り、あるメモリーが"もはや必要ない"かどうかを自動的に知るという普遍的問題は決定不能です。そのため、ガベージコレクションのこの普遍的問題に対する解決策には制限があります。このセクションでは、メインのガベージコレクションのアルゴリズムとその限界を理解するために必要な概念を説明します。ガベージコレクションアルゴリズムが依存している主な概念は、リファレンス (reference)の概念です。メモリー管理の文脈では、あるオブジェクトが別のオブジェクトに (明示的にであれ、暗黙的にであれ) アクセスできるとき、前者が後者を"参照している"と言います。例えば、JavaScript オブジェクトは自身の ここでは、"オブジェクト"の概念は通常の JavaScript オブジェクトよりも広い概念として用いられており、また、関数のスコープ (もしくは、グローバルレキシカルスコープ) を含みます。これは、最も素朴なガベージコレクションアルゴリズムです。このアルゴリズムは、"あるオブジェクトがもはや必要ない"ことを、"あるオブジェクトがその他のオブジェクトから参照されていない"ことと定義します。あるオブジェクトは、それに対する参照がゼロの時にガベージコレクト可能であると見なされます。循環に関しては限界があります。次の例では、2 つのオブジェクトが生成され、互いに参照しているため、循環を形成しています。これらは関数の呼び出し後にはスコープを外れるため、実際には役に立たず、本来であれば開放してもかまわないはずです。しかし、参照カウントアルゴリズムは、これら 2 つのオブジェクトがそれぞれ少なくとも 1 回参照されているため、どちらもガベージコレクトできないと見なします。Internet Explorer の 6 および 7 は、DOM オブジェクトに対しては参照カウント式のガベージコレクタを使用していることが知られています。循環は、メモリーリークを発生させることができるよくある間違いです:上記の例では、DOM要素"myDivElement"は"circularReference"プロパティに自身への循環参照を持っています。そのプロパティが明示的に削除またはヌルにされていない場合, 参照カウントのガベージコレクタは、常に少なくとも 1 つの参照そのまま有することになり、それが DOM ツリーから削除された場合でも、メモリー内の DOM要素を維持します。DOM要素は、大量のデータを保持している場合("lotsOfData"プロパティで上記の例に示されています)、このデータによって消費されるメモリーが解放されることはありません。このアルゴリズムは、"あるオブジェクトがもはや必要ない"ことを、"あるオブジェクトが到達不能である"ことと定義します。このアルゴリズムは、"あるオブジェクトが参照を持たない"ということは、そのオブジェクトは到達不能であるということなので、このアルゴリズムは前述のものよりも優れています。循環で見たように、逆は正しくありません。2012年の時点で、すべての近代的なブラウザーでは、マークアンドスイープ式のガベージコレクタが含まれています。過去数年間で JavaScript のガベージコレクション(世代別/インクリメンタル/並行/並列ガベージコレクション)の分野で行われたすべての改善は、このアルゴリズムの実装の改善であって、ガベージコレクションアルゴリズム自体に対する改善でも、"もうオブジェクトが必要とされていない"と扱う基準を変えるものでもありません。最初の上記の例では、関数呼び出しが戻った後、2 つのオブジェクトは、グローバルオブジェクトから到達可能な何かによってもはや参照されません。その結果、それらは、ガベージコレクタによって到達不能として検出されます。同じことは、第二の例でも言えます。div とそのハンドラが root から到達不能になったら、それらは両方ともお互いを参照するにもかかわらずガベージコレクトことができます。これを制約として取り上げましたが、実際には抵触することは滅多にありません。ガベージコレクションのことをたいてい誰もあまり気に留めないのはこのためです。Get the latest and greatest from MDN delivered straight to your inbox.現在、ニュースレターは英語でのみ提供されています。© 2005-
javascript - 破棄 - カスタムコルーチン . これは、Domenicによって作成された、明示的な または、この 基本的に、アイデアは、オブジェクトがまだ完全に構築されていない間にオブジェクトの 約束を解決または拒否する機能は、構築中のコードにのみ公開され、約束を使用している人には公開されません。 したがって、pを別の消費者に渡すと、 executor関数はオプションである必要があり、その存在はpromiseが解決をカプセル化するかどうかを決定するはずだと思います。 これで、求めていると思われるインターフェースを使用できます。 参考までに、遅延インターフェイスに対するすべての正当な理由にもかかわらず、Promiseエグゼキューターインターフェイスではなく遅延インターフェイスを使用したい場合は、1つを簡単にコーディングしてからどこでも使用できます(個人的には、これをコーディングするのは悪い考えだと思います方法ですが、このトピックに関する質問の量はあなたが異なる考え方を示唆しているため、ここにあります): ただし、Benjaminによって指摘された欠点があり、約束をコーディングする最良の方法とは見なされていません。 C のような低水準言語は、malloc() や free() のような低水準のメモリー管理プリミティブを持ちます。一方、JavaScript の値は、実体 (オブジェクト、文字列など) の生成時に割り当てられ、使用されなくなると「自動的に」開放されます。後者のプロセスはガベージコレクションと呼ばれます。この「自動的に」という言葉は混乱の元で、JavaScript (および他の高水準言語) の開発者に対し、メモリー管理を気にしないという決定をしてもよいという印象を与えます。これは誤りです。 ここに隠れた微妙なバグがあります
すぐに非同期を開始する必要がないため、このような命令がなくても約束ははるかに拡張可能です。 The JavaScript delete 演算子は、オブジェクトからプロパティを削除します。同じプロパティへの参照がそれ以上保持されない場合は、自動的に解放されます。