問題タブ [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.

0 投票する
1 に答える
149 参照

jquery - Emberjsヘルパーで機能しない非同期呼び出しからの応答を返す

Ember js ヘルパーへの ajax 呼び出しからの応答を返そうとしています。Helper でPromiseを使用したAsynchoronous呼び出しは を返します。[object Object]

console.log(data.thumbnail_url);動作していますが、コールバック<img...>は ( ) 応答を返しません。ここにJsFiddleがあります。

ハンドルバー テンプレートは次のとおりです。

0 投票する
1 に答える
363 参照

javascript - Ember で保留中の約束を外部から拒否する

概要:

Ember アプリで次のような状況に遭遇し、適切な解決策を見つけるのに苦労しています。

大量のデータを扱っているため、一部のデータ リクエストはかなり遅くなります。

最初に、Em.RSVP.hash を使用して、各ルートのモデル フックにリクエストを「バンドル」しました。ただし、これは UI をロックするため、最終的には受け入れられませんでした。

私たちの解決策は、次のように setupController フックでリクエストをカスケードすることでした。

これは機能します。ページの読み込みが瞬時に行われ、最も関連性の高いデータが最初に表示されます。

Ember を最新の状態に保つように努めています (執筆時点では 1.11.3)。Ember Data は使用していません。

問題:

問題は、UI のロックが解除されていることです。たとえば、ユーザーはログアウトできます (そして、ログイン ページにリダイレクトされます)。リクエストは持続し、最終的には完了し、ログインとログアウトで設定した csrf トークンを台無しにします。次にユーザーがログインしようとすると、422 エラーが発生します。

さらに単純なシナリオは、実行時間の長い要求が終了する前にフィルター設定を変更することです。新しいリクエスト (多くの場合、フィルタの変更によってスコープが縮小されます) は、最初のリクエストの前に終了します。その後、データは、最終的に終了する元の要求によって上書きされます。

私たちの当面の解決策は、保留中の約束を殺そうとすることでしたが、それを行う「最新の」方法を見つけることができませんでした。

これは機能します:

上記は、ポイントを理解するために少し見苦しく単純化されています。

Ember Docs には、「新しいコードは (遅延の) 代わりに RSVP.Promise コンストラクターを使用する必要がある」と記載されています。ただし、新しい方法を使用してこれを行う方法はないようです。

質問:

保留中の約束/要求をキャンセルする最新の方法はありますか?
保留中のリクエストをクリーンな方法でキャンセルできるように、ページの読み込みを分割するより良い方法はありますか?

アップデート

私は延期を使用することになった。美しくはありませんが、UI をリファクタリングし、おそらく遅いクエリの必要性を再考するまでは十分でしょう。

ありがとうございました。

0 投票する
1 に答える
1719 参照

javascript - Ember RSVP.Promise 解決関数が未定義を返す

アダプター「findQuery」に関数があり、関数はサーバーからデータを取得して返す必要があります。

関数:

したがって、関数をデバッグすると、関数が正しいデータで解決されることがわかります (API は、要求されたすべてのデータをオブジェクトの配列として返しました)。そして、ログエラーが発生します:

エラー: アサーションに失敗しました: findQuery からの応答は未定義ではなく、配列でなければなりません

アップデート

問題は解決しましたが、なぜ発生するのかまだわかりません。

何が起きましたか?

store-injector ファイルに設定しました

それは私のためにそのように見えるAPIエンドポイントを解決します:

https://api.url.net/account/85/devices

何らかの競合がありますが、私が試みたのは、次のような上記の関数で URL を解決することです。

https://api.url.net/account/85/users/135/devices

それは解決しましたが、それが起こった理由を参照できません。それは理にかなっていますが、誰かがそれが起こった理由を説明できることを願っています.

0 投票する
3 に答える
3941 参照

javascript - すべての then-ables で reject コールバックを使用している場合でも、最後に常に catch() が必要ですか?

最後にキャッチを配置していますが、少なくとも特定のインスタンスで空のオブジェクトを返しています。知らないことにはキャッチが必要ですか、それとも私を台無しにするだけですか?

違いますか?.then(resolve, reject)または、すべての親チェーンされた then-ablesのメソッドのすべての使用法でエラー/拒否ハンドラーを使用している場合でも、何らかの用途がありますか?

編集:より良いコード例、私は願っています。私はまだ命名にある種のアンチパターンを使用している可能性があると思います.rejectMessage例えば、それはjqXhrオブジェクトですよね?

だから多分私はそれらに正確にその名前を付ける必要がありますか?つまりjqXhr?ちなみに、then()エラーがあった場合、 each 内のその場で拒否するのが好きな理由は、この方法で個々の呼び出しを大量にログに記録できるためです。特に問題があった場合、その方法ではありません何かを追跡するために。できるので、マイクロロギング。

Promise は、このようにデバッグの世界を開くのに役立っています。

これが私が試した3つの例です。私は方法 1 と方法 2 を好みますが、私が約束の地で出発した方法 3 に戻ることは決してありません。

onreadyまた、これを別のバックアップとしてどこかで実行します。

エラー例の編集

0 投票する
1 に答える
263 参照

ember.js - Ember: ネストされたモデルから計算されたプロパティを取得する方法は?

まず、Ember.js で promise を操作する方法がわかりません。ネストされている非同期モデルデータに依存するコントローラーのプロパティを呼び出したいです。

また、私のモデルは次のようになります。

だから私はこのようなものを作成しました:

2つの問題があります(コメントですでに言及されているように):

  1. すべてのプラクティスですべてのアルファのように、ネストされた hasMany 非同期モデルをロードする方法。
  2. テンプレートなどで使用する RSVP.hash-Method のプロパティとして完全な結果を返す方法

誰でも私を助けることができますか?

2015 年 6 月 20 日編集

@Kingpin2k が示唆したように、問題をよりよく理解するために Gist を追加しました: https://gist.github.com/MarcManhart/e5c1d91e8fdfd876de37