私は観察可能なものを持っています:
public updateThingName(name: string, thingId: number): Observable<any> {
console.log('attempting rename');
return this.http
.put(
`${this.thingApi}/projects/${thingId}`,
{ name },
this.options,
).pipe(
map(response => response.data.id)
);
}
より長いチェーンの一部として呼び出されます:
return this.projectService.getProject(id).pipe(
switchMap(prevProjectData => {
return this.projectService.updateProject(id, data).pipe(
map(newProjectData => ({prevProjectData, newProjectData}))
)
}),
switchMap(({prevProjectData, newProjectData}) => {
return this.thingService.updateThingName(newProjectData.title, newProjectData.thingId)
.pipe(retry(5),catchError(err => {
return this.projectService.revertProjectUpdate(err, prevProjectData);
}))
}),
tap(() => { ... save to logs only when successful ... })
);
何かの名前を変更しようとします。失敗した場合は5回再試行し、それでも失敗した場合はエラーをキャッチし、以前の変更を元に戻し、元に戻す関数で最後のエラーをスローします。エラー応答を元に戻してフロントエンドに送り返すことは問題なく機能しますが、どこに置いてretry(5)
もconsole.log('attempting rename');
、ログにはイニシャルしか表示されません。
再試行を使用できませんか?これを機能させるにはどうすればよいですか?
これはNestJSのバックエンドコードであるため、違いが生じる場合は、最終的なサブスクライブの側面を直接処理しません。
ありがとう!
それは正しいはずです。メソッドは1回呼び出されましたが、複数回再サブスクライブしようとします。サブスクライブごとにメッセージをログに記録すると、それを確認できるはずです。
public updateThingName(name: string, thingId: number): Observable<any> {
return defer(() => {
console.log('attempting rename');
return this.http
.put(
`${this.thingApi}/projects/${thingId}`,
{ name },
this.options,
).pipe(
map(response => response.data.id)
);
)};
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加