問題タブ [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.
jquery - JQuery 非同期画像スライドショーのプリロード
JQuery アニメーション フレームワークを使用してスクリプトを作成しています。このシナリオでは、さまざまなアニメーションのシーケンスが必要です。新しいアニメーションが始まると、ページの背景画像を変更する必要があります。
アニメーション フレームワーク (JSTween と呼ばれます) は、次のコールバックを提供します。
次の疑似コードの JQuery 実装を探しています。
および同様のツールを探していましたが$.when
、それらを正しく使用する方法がわかりません。
angularjs - Angular JS: promise にバインドする方法
約束をビューにバインドしようとしています。あなたがそれを直接できるかどうかはわかりませんが、それが私がやろうとしていることです. 私が間違っていることは何ですか?
注: ソースはタイムアウトが少し工夫されており、静的データを使用していますが、これはコードの診断を容易にするためです。
編集: JSFiddle ページ: http://jsfiddle.net/YQwaf/27/
編集: 解決策: Promiseを直接バインドできることが判明しました。元のコードには 2 つの問題がありました。
- angular の $timeout の代わりに setTimeout() を使用すると問題が発生しました。Angular は、タイムアウトがトリガーされたときに UI を更新する必要があることを認識していません ( setTimeout 内で $scope.$apply を使用してこれを解決するか、単に $timeout を使用することができます)。
- promise を返す関数へのバインディングは問題でした。2 回目に呼び出された場合は、さらに別の約束をします。スコープ変数をプロミスに設定し、必要に応じて新しいプロミスを作成することをお勧めします。(私の場合、これは国コードで $scope.$watch を呼び出していました)
HTML:
JS:
javascript - map/reduce と jQuery を使用して、任意の数のスクリプトを順次実行します
任意の数のスクリプトを実行する必要があります。次のものは、前のものがロードおよび実行されたもののみを実行できます。RequireJS (および関連) が正しい選択であることはわかっていますが、promise について学習しようとしているので、これが私の実験です。
誰かが私のソリューションの落とし穴と代替案について詳しく説明できますか?
javascript - JSDocでpromiseの解決と拒否のタイプを指定するにはどうすればよいですか?
たとえば、NodeJS用のQライブラリを使用して、promiseオブジェクトを返すコードがあります。
JSDocを使用してそのような戻り値を文書化する方法は?
node.js - ノードpromise-io-なぜクラッシュするのですか?
開発スタイルに合わせて調整しながら、ノードビギナーチュートリアルを進めています。たとえば、私はcoffeescriptとrequirejsを使用することを選択しています。後者は、かなりの定期的な量に加えて、大量のコールバックスープを含みます。通常、これらは私がプロミスを使用して対処したい状況です。いくつかの最小限の研究の約束の後-ioは合理的な解決策のようです。それは機能しますが、突然、すべてを使用してpromiseを組み合わせる際に問題が発生します(これはjQuery.whenに類似しているようです-これは私が頻繁に使用する手法です)。
以下は私のserver.coffeeファイルです。all
完全に機能するため、ネストされた遅延を呼び出しに置き換えると、 1つの要求が処理され、サーバーがハングします。誰かが問題が何であるかを知っていますか?
asynchronous - いくつかのマングース クエリを実行する: 代わりにプロミスを使用する方法は?
次のコードがあり、ネストされたコールバックを避けたい:
何か案は?
javascript - 約束としてモジュールロードを実装することは可能ですか?
ユーザーがレポートを作成できるシングルページアプリケーションを作成しました。ユーザーには、データソース、グラフの種類、テーマを選択できるフォームが表示され、確認すると、ページに必要なファイルが読み込まれ、グラフが描画されます。
パフォーマンスを向上させるために、コードモジュールとデータを並行してロードしたいと思います。たとえば、ユーザーが「円グラフ」、「青のテーマ」、「航空会社の統計」を選択した場合:
(jsモジュールの円グラフが読み込まれる)および(青いテーマのcssが読み込まれる)および(Airline Stats jsonが読み込まれる)
THEN(チャートを描く)
AMDを実装するライブラリと、Promiseを実装するライブラリをいくつか見つけましたが、上記の例のようにモジュールの読み込みとPromiseを組み合わせることができるライブラリはありません。これは可能ですか?すでにこれを実装しているライブラリはありますか?
私のニーズはクライアントサイドのJavaScriptです。
javascript - jQuery Deferred/Promises動的配列が正しい順序でコールバックを実行していません
私がここで誤解していることについての洞察に感謝します。私の要件は次のとおりです。
URLの配列があります。各URLのAJAXリクエストを同時に実行したいのですが、最初のリクエストが完了したらすぐに、最初のコールバックを呼び出します。次に、2番目のリクエストが完了したら、そのコールバックを呼び出します。
オプション1:
応答が正しい順序で完了する保証がないため、明らかにこれは機能しません。
オプション2:
これは機能するはずですが、欠点は、すべてのAJAXリクエストが完了するまで待機してから、コールバックを起動することです。
理想的には、最初のコールバックが完了したらすぐに呼び出し、次に2番目のコールバックをチェーンして、その応答が受信されるたびに(または、すでに解決されている場合はすぐに)実行し、3番目というように続けます。
配列の長さは完全に可変であり、いつでも任意の数のリクエストを含めることができるため、コールバックチェーンをハードコーディングすることはオプションではありません。
私の試み:
問題は、コールバックが完全にランダムな順序で実行されることです。たとえば、配列に「home.html」、「page2.html」、「page3.html」を追加した場合、応答の順序は必ずしも「home.html」、「page2.html」、「page3」になるとは限りません。 .html'。
私は明らかに、約束が機能する方法について何かを根本的に誤解しています。どんな助けでもありがたいことに感謝します!
乾杯
編集
OK、今はさらに混乱しています。このJSFiddleは、 Alnitakの回答を使用した配列とJoeFletchの回答を使用した別の配列で作成しましたが、どちらも期待どおりに機能しません。誰かがここで何が起こっているのか見ることができますか?
編集2
動作しました!以下のJoeFletchの回答に基づいて、私は次のようにソリューションを適応させました。
TL; DR: jQueryの約束がわかりません。それがなくても、機能します。:)
jquery - jQuery promise のチェーン
パイプではなく、チェーンするだけで、プロミスをチェーンしようとしています。
たとえば、次の方法があります。
そして、このメソッドを何度も実行したいのですが、次々と実行します。を使用する以外の方法を作成しましたが、使用eval
にはあまり満足していませんeval
:
アイデアは、次のexecuteTimes(3);
出力を取得することです。
ここにライブの例を作成しました: http://jsfiddle.net/vtortola/Cfe5s/
最善の解決策は何ですか?
乾杯。
rest - Promise レスポンスは GET では機能しますが、XHR の POST では機能しません
DOJO 1.8 で XHR.post を介して URL を呼び出そうとしています。promise 応答から STATUS プロパティと getHeader() をキャッチする必要がありますが、問題は、POST で URL を呼び出すと約束がなく、GET で呼び出すと必要なすべてのプロパティがありますが、リクエストを POST としてのみ送信できます。
最も奇妙なのは、AngularJS にうまく動作する別のコードがあることです。このコードは同じことを行います。DOJO と AngularJS をテストしています。
STATUS 情報をキャッチして 201(created) かどうかを確認する必要があります。true の場合は getHeader('location') をキャッチし、getHeader('location') から取得した URL を呼び出す必要があります。
Dojo 1.8 での私のメソッドを見てください。