問題タブ [angular2-observables]
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.
asynchronous - パイプ「非同期」が見つかりませんでした
Angular 2 と Firebase を使用して簡単なブログを作成しようとしていますが、コンポーネントで非同期パイプを使用すると問題が発生します。コンソールにエラーが表示されます。
zone.js:344Unhandled Promise の拒否: テンプレート解析エラー: パイプ 'async' が見つかりませんでした ("
[エラー ->]{{ (blog.user | async)?.first_name }}
"): BlogComponent@6:3 ; ゾーン: ; タスク: Promise.then ; 値: エラー: テンプレート解析エラー:(…) エラー: テンプレート解析エラー: パイプ 'async' が見つかりませんでした ("
blog.component.ts
blog.component.html
app.component.ts
app.component.html
blog.service.ts
この問題は、blog.component.html ファイルで async を使用しようとした場合にのみ発生します。ユーザー名を app.component.html ファイルに出力しようとすると機能します。blog.module.ts に AsyncPipe を挿入する必要がありますか? blog.component.ts で非同期を機能させるにはどうすればよいですか?
angular - angular2 を使用した同期 Web コール
ユーザーが送信をクリックすると、jsonの各要素の値と初期値が同じか異なるかを確認しています。値と初期値が同じでない場合は、Rxjs を使用してサービス コールを呼び出しています。initail の値と値がすべての要素で同じである場合、「Error-Data is not changed」というエラー メッセージが表示されます。
私のjsonはこのようなものです-
送信ボタンをクリックすると、この関数を呼び出しています-
今問題は、この関数を呼び出すときです。Web 呼び出しの非同期呼び出しが発生し、フローが if(anyChangeDetected == false) ブロックに直接移動し、そのアラートを受け取るたびに発生します。どうすれば回避できますか?
angular - ループでネストされたオブザーバブル
タグに関連する 1 つのコンテンツを保存するために、ネストされたオブザーバブルを作成したいと考えています。最初にコンテンツを保存し、コンテンツ ID を返し、コンテンツ ID を外部キーとしてタグを保存します。ちなみに、サービスはループ内で同時にデータを送信するように見えます。(backend log run pararel) 次の処理が完了するまで待機させるにはどうすればよいですか
component.ts
service.ts
バックエンド ログ (内容を含むタグを保存)
ほぼ同時にメソッドに入ったように見えます。savetag を 1 つの保存が完了するまで待機させてから、次の保存を行うにはどうすればよいですか?
rxjs - コールバック地獄を監視可能なチェーンに変換する
私は、それぞれが次の「コールバック」関数に戻り値を渡す強制的な連続した一連の関数呼び出しを実現するために、関数がオブザーバブルを返すという規則を使用してきました。しかし、チュートリアルを読んで見た後、フラットマップだと思うものでこれをよりうまく行うことができるようです。私は約束から始めていませんが、私はこのアドバイスhttps://stackoverflow.com/a/34701912/2621091に近いと思います。以下に、より良いアプローチに関するアドバイスでクリーンアップするのに役立つことを望んでいる例をリストします。あなたが提供できる助けにとても感謝しています:
angular - Angular 2 の 2 つの個別のオブザーバブルに対する 2 つの順次サブスクリプション
Angular 2 の 2 つの別々のオブザーバブルに対する 2 つの連続したサブスクリプションに問題があります。次のことを試みています。
- 座標から位置を取得する
- この場所を私のjsonに添付してください
- jsonをサーバーに送信
私がそれを行う方法は、私が間違っていると信じていることです:
このようにして、実際に場所を取得してから 5 ~ 10 秒で DOM が更新されます。
authentication - 認証トークンの更新を必要とする複数の失敗したリクエストを処理するAngular 2
アクセス トークンを使用する API の Angular 2 フロントエンドを作成しています。これでオブザーバブルとngrx/storeを使用しようとしています。
ログインとログアウトは正常に機能し、意図したとおりに機能します。トークンの有効期限が切れたためにリクエストが失敗した場合のコードもいくつか書きました。このコードは通常は問題なく動作しますが、短期間に複数のリクエストがあると問題が発生します。これは、たとえば、ページを更新し、アプリがアプリ全体で必要な 2 つまたは 3 つのストアを埋めようとしたときに発生します。
私の認証サービスには、次のような機能があります。
私の REST 関数には次のような関数があります。
currentUser()
関数、refreshToken()
、およびauthHeader()
が私の質問を理解するために必要だとは思いません。
失敗したリクエストが 1 つあり、エラーが 401 の場合、アプリは を呼び出しrefreshLogin()
、新しいアクセス トークンを取得して保存し、新しいアクセス トークンを使用して元のリクエストを再試行します。
失敗したリクエストが複数あり、それらが同時に効果的に発生している場合、問題が発生します。たとえば、2 つの GET リクエストがあるとします。どちらも 401 エラーを返します。どちらもrefreshLogin()
関数を起動します。1 つrefreshLogin()
は成功し、新しいアクセス トークンを保存します。もう 1 つは、更新に使用されているトークンが無効になっているため失敗します。この一連の関数は失敗し、アプリが停止します。
1 つの解決策は、GET 要求を連続してスタックすることですが、そうする必要はないようです。
失敗した GET (またはその他の) 要求で、アプリがアクセス トークンを更新するための呼び出しをトリガーするソリューションが必要だと思います。認証サービスはこれらのリクエストを抑制して、数秒ごとに 1 つだけになるようにします。このリクエストが実行され、新しいアクセス トークンがすべてのリクエストに返され、再試行されます。
これは賢明なアプローチだと思いますか、それとも最初からよく考えられなかったアプローチを修正しようとしているだけですか? これらのパーツをどのように相互作用させることをお勧めしますか?