問題タブ [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.
c++ - std::promiseおよびstd::futureに関する非自明な生涯の問題
この質問は、前の質問と非常によく似ています。pthread_once()の競合状態?
これは本質的に同じ問題です-std::promise
呼び出し中の終了 の存続期間promise::set_value
(つまり、関連する未来にフラグが立てられた後、pthread_once
実行される前)
ですから、私の使用法にはこの問題があることを知っているので、このように使用することはできません。しかし、これは自明ではないと思います。(Scott Meyerの賢明な言葉で:インターフェースを正しく使いやすく、正しく使いにくいようにする)
以下に例を示します。
dispatcher
キューでスピンし、「ジョブ」(a)をポップして実行するスレッド( )がありますstd::function
。synchronous_job
ディスパッチャスレッドで「ジョブ」が実行されるまで呼び出しスレッドをブロックするユーティリティクラスがありますstd::promise
およびは-のstd::future
メンバーです。が設定されると、ブロックされた呼び出しスレッドが続行され、スタックがポップオフされて破棄されます。synchronous_job
future
synchronous_job
- 残念ながら、この時点では、内部
dispatcher
でコンテキストが切り替えられました。にフラグが立てられていますが、への呼び出しが実行されておらず、pthreadスタックが何らかの理由で破損しています。つまり、次回はデッドロックになります。promise::set_value
future
pthread_once
呼び出しはpromise::set_value
アトミックであると思います。フラグを立てた後にさらに作業を行う必要があるという事実は、future
これらのクラスをこのように使用する場合、必然的にこの種の問題につながります。
だから私の質問は:この同期メカニズムを提供するクラスに関連付けられたライフタイムを維持しながら、std::promise
とを使用してこの種の同期を実現するにはどうすればよいですか?std::future
@Jonathan Wakely、おそらく内部でRAIIスタイルのクラスを使用してcondition_variable
、フラグを立てた後にデストラクタにを設定できますfuture
か?これはpromise
、への呼び出しの途中でが破棄された場合でもset_value
、条件変数を設定する追加の作業が正しく完了することを意味します。ただのアイデア、それを使用できるかどうかわからない...
以下の完全に機能する例と、その後のデッドロックされたアプリのスタックトレース:
デッドロックされたアプリのスタックトレース:
スレッド1(メインスレッド)
スレッド2(ディスパッチャースレッド)
jquery - File API readAsText の jQuery Promise を作成する
ユーザーが単一のテキスト ファイルを選択するファイル入力要素を使用しています。
選択したファイルのコンテンツをロードする FileReader オブジェクトの非同期イベントに関連付けられた jQuery Promise を作成したいと思います。さまざまなコンテキストでこのようなコードを試しましたが、 then() コールバックに渡されたコンテンツ変数を取得できないため、ある種のタイミングの問題があるようです:
実際には 2 つのイベントが関係しています。最初のイベントは、ユーザーが [参照] ボタンをクリックして特定のファイルを選択したときに発生します。2 番目のイベントは、FileReader が選択されたファイルの内容とともに読み込まれるときです。これを正しくパッケージ化する方法を誰かが知っている場合は、解決時に選択したファイルの内容が保持されることを約束します。あなたの洞察に感謝します。前もって感謝します。
c++ - 先物対約束
未来と約束の違いに戸惑っています。
明らかに、それらには異なる方法やものがありますが、実際のユースケースは何ですか?
それは...ですか?:
- 非同期タスクを管理しているときは、futureを使用して「infuture」の値を取得します
- 私が非同期タスクであるとき、ユーザーが私の約束から未来を得ることができるように、リターンタイプとしてpromiseを使用します
jquery - jQueryはCoffeeScriptで延期/約束/アニメーション化
アニメートしたいものが3つあります。頭、足、腕です。私はjQueryとCoffeeScriptを使用しています。
次のように頭と足をアニメーション化する関数を作成したいと思います。
次に、足と頭の移動が完了したら、腕を動かします。
when
/パターンを使ってみthen
ましたが、正しく使っていないと思います。
move_feet
すぐに火事。これを行うための適切な方法は何ですか?
scala - A または Promise[A] を指定して単一の Promise[A] を返すにはどうすればよいですか?
期待どおりに機能する2つの機能があります
def getSomething: Promise[JsValue]
def getSomethingElse: Promise[JsValue]
次に、3 番目の関数 ( def getAll: Promise[JsValue]
)を定義getSomething
して、応答に基づいて応答を返すか、getSomethingElse
その応答を元の関数に追加します。
私は現在getAll
、次のように定義しています。
これは機能しますが、より標準的なスカラである同じことを達成するためのより短い方法があるかどうか疑問に思っていましたか?
vb.net - VB.NETはPromises/Deferredsをサポートしていますか?
jQueryのDeferredオブジェクトに似たものに興味があります。以下のリンクはスレッド指向のようです。Javascriptが単一の時分割スレッドで実行されている場合、モデルはまったく異なります。
sockets - Node.jsのキャッチされていないソケット例外 - ソケットが閉じられています
これが問題です。閉じたソケットへの書き込み時に例外が発生しましたが、おそらくプロミス内にあるため、その例外は try キャッチによってキャッチされません。
さらに、メインアプリに process.uncaughtexception を追加しても役に立ちません。
コンソール出力は次のとおりです。
更新: 私は Node.js の講演に参加し、例外処理について少し学びました。どうやらそれは明らかに嫌で、無視されています。取り組んでいます。
scala - 結果が同じメッセージからの応答として利用できないことを考慮して、Akkaアクターに尋ねることによって約束(または未来)を取得する方法
私はこのチュートリアルに従いました:http://doc.akka.io/docs/akka/2.0/intro/getting-started-first-scala.html
基本的に、これら2つのメッセージに応答するマスターアクターがあります。
「計算」というメッセージを送信し、(スレーブアクターからの)いくつかの「結果」の後に正しい計算が行われます。
今、私はplay2コントローラーのアクションの中にいて、これを使用しています:
残念ながら(明らかに)Calculateメッセージは送信者へのメッセージで応答するため、何も得られません。
どういうわけか、Akka Actorを待機させたいのですが、計算が完了したら、送信者にメッセージを送り返します。
しかし、どうやって?...私が間違った方法でそれをモデル化していない限り!
node.js - Node: async.foreach エラーがキャッチされず例外がスローされるとサイレントに失敗する
async.forEach コンストラクトでいくつかの非同期実行された「子」関数をラップしています (素晴らしいライブラリから: https://github.com/caolan/async )
これらの子関数の 1 つがキャッチされない例外で失敗すると、ノード プロセス全体がハングします。(コールバックが async.forEach コンストラクトに返されることはないため、async.forEach は引き続き子関数がビジーであると見なします)
ただし、どこにもキャッチしていないため、少なくともスローされた例外がバブルアップすると考えていました。async.forEach がこれらの例外を処理する方法を構成する方法はありますか? これに対してプログラミングするのは本当に難しいです。
javascript - promise の軽量実装
私は単純なチャート作成ツールを構築しています。ユーザーがデータ ソースとグラフの種類を選択すると、特定のグラフ (.js) のデータとスクリプトの両方が読み込まれ、コードがグラフをレンダリングします。
現在、次のシーケンスを使用しています。
- チャート スクリプトを読み込む
- データをロードする
- グラフをレンダリングする
パフォーマンスを向上させるために、Promise を実装し、スクリプトとデータを並行してロードしたいと考えています。jQuery のようなライブラリは私のニーズには大きすぎます (質問のポイントは、これについて議論することではありません)。もっと軽量なソリューションはありますか? たぶん 1 ~ 2 kb のライブラリ、またはチュートリアルですか? 繰り返しますが、これは 2 つのアクションを並行して行う非常に基本的な実装です。
[更新] すべての返信が見栄えが良いので、すべての返信に賛成票を投じました。もう少しテストをしたら、また報告します。