問題タブ [rsvp-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 - Emberjsヘルパーで機能しない非同期呼び出しからの応答を返す
Ember js ヘルパーへの ajax 呼び出しからの応答を返そうとしています。Helper でPromiseを使用したAsynchoronous
呼び出しは を返します。[object Object]
console.log(data.thumbnail_url);
動作していますが、コールバック<img...>
は ( ) 応答を返しません。ここにJsFiddleがあります。
ハンドルバー テンプレートは次のとおりです。
javascript - Ember で保留中の約束を外部から拒否する
概要:
Ember アプリで次のような状況に遭遇し、適切な解決策を見つけるのに苦労しています。
大量のデータを扱っているため、一部のデータ リクエストはかなり遅くなります。
最初に、Em.RSVP.hash を使用して、各ルートのモデル フックにリクエストを「バンドル」しました。ただし、これは UI をロックするため、最終的には受け入れられませんでした。
私たちの解決策は、次のように setupController フックでリクエストをカスケードすることでした。
これは機能します。ページの読み込みが瞬時に行われ、最も関連性の高いデータが最初に表示されます。
Ember を最新の状態に保つように努めています (執筆時点では 1.11.3)。Ember Data は使用していません。
問題:
問題は、UI のロックが解除されていることです。たとえば、ユーザーはログアウトできます (そして、ログイン ページにリダイレクトされます)。リクエストは持続し、最終的には完了し、ログインとログアウトで設定した csrf トークンを台無しにします。次にユーザーがログインしようとすると、422 エラーが発生します。
さらに単純なシナリオは、実行時間の長い要求が終了する前にフィルター設定を変更することです。新しいリクエスト (多くの場合、フィルタの変更によってスコープが縮小されます) は、最初のリクエストの前に終了します。その後、データは、最終的に終了する元の要求によって上書きされます。
私たちの当面の解決策は、保留中の約束を殺そうとすることでしたが、それを行う「最新の」方法を見つけることができませんでした。
これは機能します:
上記は、ポイントを理解するために少し見苦しく単純化されています。
Ember Docs には、「新しいコードは (遅延の) 代わりに RSVP.Promise コンストラクターを使用する必要がある」と記載されています。ただし、新しい方法を使用してこれを行う方法はないようです。
質問:
保留中の約束/要求をキャンセルする最新の方法はありますか?
保留中のリクエストをクリーンな方法でキャンセルできるように、ページの読み込みを分割するより良い方法はありますか?
アップデート
私は延期を使用することになった。美しくはありませんが、UI をリファクタリングし、おそらく遅いクエリの必要性を再考するまでは十分でしょう。
ありがとうございました。
javascript - Ember RSVP.Promise 解決関数が未定義を返す
アダプター「findQuery」に関数があり、関数はサーバーからデータを取得して返す必要があります。
関数:
したがって、関数をデバッグすると、関数が正しいデータで解決されることがわかります (API は、要求されたすべてのデータをオブジェクトの配列として返しました)。そして、ログエラーが発生します:
エラー: アサーションに失敗しました: findQuery からの応答は未定義ではなく、配列でなければなりません
アップデート
問題は解決しましたが、なぜ発生するのかまだわかりません。
何が起きましたか?
store-injector ファイルに設定しました
それは私のためにそのように見えるAPIエンドポイントを解決します:
何らかの競合がありますが、私が試みたのは、次のような上記の関数で URL を解決することです。
それは解決しましたが、それが起こった理由を参照できません。それは理にかなっていますが、誰かがそれが起こった理由を説明できることを願っています.
javascript - すべての then-ables で reject コールバックを使用している場合でも、最後に常に catch() が必要ですか?
最後にキャッチを配置していますが、少なくとも特定のインスタンスで空のオブジェクトを返しています。知らないことにはキャッチが必要ですか、それとも私を台無しにするだけですか?
違いますか?.then(resolve, reject)
または、すべての親チェーンされた then-ablesのメソッドのすべての使用法でエラー/拒否ハンドラーを使用している場合でも、何らかの用途がありますか?
編集:より良いコード例、私は願っています。私はまだ命名にある種のアンチパターンを使用している可能性があると思います.rejectMessage
例えば、それはjqXhrオブジェクトですよね?
だから多分私はそれらに正確にその名前を付ける必要がありますか?つまりjqXhr
?ちなみに、then()
エラーがあった場合、 each 内のその場で拒否するのが好きな理由は、この方法で個々の呼び出しを大量にログに記録できるためです。特に問題があった場合、その方法ではありません何かを追跡するために。できるので、マイクロロギング。
Promise は、このようにデバッグの世界を開くのに役立っています。
これが私が試した3つの例です。私は方法 1 と方法 2 を好みますが、私が約束の地で出発した方法 3 に戻ることは決してありません。
onready
また、これを別のバックアップとしてどこかで実行します。
エラー例の編集
ember.js - Ember: ネストされたモデルから計算されたプロパティを取得する方法は?
まず、Ember.js で promise を操作する方法がわかりません。ネストされている非同期モデルデータに依存するコントローラーのプロパティを呼び出したいです。
また、私のモデルは次のようになります。
だから私はこのようなものを作成しました:
2つの問題があります(コメントですでに言及されているように):
- すべてのプラクティスですべてのアルファのように、ネストされた hasMany 非同期モデルをロードする方法。
- テンプレートなどで使用する RSVP.hash-Method のプロパティとして完全な結果を返す方法
誰でも私を助けることができますか?
2015 年 6 月 20 日編集
@Kingpin2k が示唆したように、問題をよりよく理解するために Gist を追加しました: https://gist.github.com/MarcManhart/e5c1d91e8fdfd876de37