問題タブ [q]
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.
javascript - Q promise によるシリアル実行
Q promise の仕組みを誤解していると思います。次の約束が始まる前に最初の約束を解決したいのですが、それは実現していません。これが私のコードです:
このコードは以下を生成します。
私はそれが生成することを願っています:
私は何を間違っていますか?
node.js - node.js に deferreds (Q) の監視のようなものはありますか?
すべての未解決の状態を確認したい (可能であれば、遅延のすべてのログ: 初期化、未解決、解決済み/拒否済みの状態)。そのためのメカニズムはありますか?
次のようなもの: Q.getAllDeferreds()
、またはQ.getLog()
breeze - BreezeJS は保存に失敗すると Q の約束を破る
クエリの実行が失敗した場合 (保存時のデータベース制約違反など)、コンソールで確認できます。
空にする必要があります: []
例を次に示します (コンソールで[空にする必要があります: [] ) を確認できます):
私は Breeze と Q を初めて使用するので、質問は次のとおりです。これを無視する必要がありますか? それとも私は何か間違ったことをしていますか?それとも、報告するのは単なるバグでしょうか?
javascript - Q.promises の使用: 非同期スローをキャッチする方法は?
私はプロミスに Q を使用していますが、いくつかのテストをセットアップするときに、プロミスを返す関数内でスローされた非同期エラーをキャッチする方法を発見しました。
私はそれを a 内にラップしてチェーン化しようとしましたがQ.when
、fail
以下のように aQ.fcall
とチェーン化されましfail
たが、動作しません。
これに方法はありますか?
node.js - q.js:約束が果たされるまで関数の実行を停止できますか?
例として:
これも可能ですか?
私が見ることができる代替案は、常に非同期関数を呼び出し、「foo」チェックをスローすることです。これは最適ではありませんが、コード内で機能します。または、「foo」がtrueであると想定し、falseの場合はエラーをスローします(非同期関数自体を呼び出した後に呼び出し元が再試行する必要があります)。これは、明らかな理由からさらに理想的ではありません。
編集:一時的な回避策として、私はこれが機能することを発見しましたが、それはほとんど理想的ではありません:
node.js - Node.js で Q deferred が遅いのはなぜですか?
そこで、Node.js でこの単純なテスト サーバーを作成しまし
た。ダイレクト レスポンスを行うたびに、1秒あたり 2200のリクエストを受け取ります (速い!)。シンプルな Q deferred だけをラップすると、 580リクエスト/秒 ( 4 倍遅くなります!)に落ちます。その大きな違いを説明できる人はいますか?
javascript - promise の使用 - 失敗ハンドラーでのスタック トレースのログ記録
私はnodejsにかなり慣れていないので、私がやろうとしていることをもう少し詳しく説明します。
私はウェブサーバーを持っています。リクエストが失敗した場合、その例外のスタック トレースをログに記録したいのですが、エラー ページを配信してサーバーをクラッシュさせないようにします。
例として、リクエストを処理する関数:
コンソールの出力:
スタック トレースにアクセスする方法がわかりません。しかし、.fail-handler で例外をスローすると (または完全な .fail-handler を省略すると)、コンソールにスタック トレースが表示されます (ただし、サーバーを再起動する必要があります)。
だから私は私の質問は次のとおりだと思います:
promise 失敗ハンドラーでスタックトレースにアクセスするにはどうすればよいですか?
編集:もちろん、説明を改善する方法に関するヒントは大歓迎です。私が自分自身を明確にしていない場合は、私に知らせてください。
angularjs - AngularJS:「コレクター」サービスが promise を返します。関数内で解決して値を渡す方法は?
モデルを格納するサービスを作成しましたCollector
。これは、localStorage とサーバーとのインターフェイスです。コレクターからモデルを取得する関数Collector.retrieveModel(uuid)
があり、最初に localStorage をチェックして既に存在するかどうかを確認し、そうでない場合はサーバーから要求します。
外観は次のとおりです。
現在存在しているため、モデルが localStorage に存在しなかった (そして remoteModel が呼び出された) 場合、promise が返され、モデルがサーバーから取得されると実行されます。その後、関連する $scopes が更新されます。これは期待どおりに機能します。
ただし、モデルが localStorage に存在する場合、deferred は解決されますが、関数が promise を返す前です。したがって、解決された値が伝播されることはありません。
時期尚早に約束を果たさないように、一貫して約束を返すにはどうすればよいですか? $timeout を使用したくありません。
breeze - koGrid を Breeze と Durandal HotTowel テンプレートで動作させる
ビュー モデルにバインドしようとしている koGrid を含むデュランダル ウィジェット (ホット タオル テンプレート) があります。
私は非同期遅延やプロミスを含むこれらのテクノロジーにかなり慣れていないので、そのような問題について無知であることを許してください!
ビュー モデルは、Breeze エンティティ マネージャー クエリ (Q promise を返す) の結果を返すだけの datacontext クラスからデータを取得します。
私のウィジェットのコンストラクターには、次のものがあります。
データは「ents」変数に返され、observableArray myData にプッシュされます。これは機能するはずですが、koGrid ファイルでエラーが発生します。
valueAccessor() が定義されていないため、グリッドが機能しません。
ここで、リモート クエリを実行するコードを次のように変更すると:
(jQueryを使用すると約束されます)、何らかの理由で機能します。ただし、ents 変数のタイプは「makePromise」であり、解決方法がわかりません。
私の理解では、とにかく Breeze が返すのは Q の約束です。
Q.when(queryDataContext.executeQuery('Customer', 'good')).then(function(ents) {
ents にはデータが含まれますが、koGrid の未定義の問題に戻ります。
どんな助けでも大歓迎です!
javascript - Q - 成功と失敗を処理するための Sync Promise の連鎖
これは簡単なはずです..
私は基本的な約束連鎖を行う方法を知っています:
ただし、成功と失敗の両方を処理できるデータを最終的に処理する前に、次のようなある種のインターセプターを追加したいとします。
それをチェーンに含めるにはどうすればよいですか?promisePrinter
いくつかの異なる方法を試しましたが、期待どおりに fn を呼び出すことができないようです。
ティア!