私はあらゆる種類の順列を試しました。私がやろうとしているのは、ID でオブジェクトを取得するために get を実行し、そのオブジェクトの属性を変更してからポストバックすることで、オブジェクトを効果的に更新することです。
これが私が試したことです:
archive(orgId: number, id: number): Observable<Aircraft> {
return this.http.get<Aircraft>('/api/organisations/' + orgId + '/aircrafts/' + id)
.pipe(mergeMap( a => {
console.log(a);
return this.http.post<IAircraft>('/api/organisations/' + orgId + '/aircrafts/' + a.id, a).subscribe();
});
}
結果: エラー TypeError: ストリームが必要な場所に無効なオブジェクトを指定しました。Observable、Promise、Array、または Iterable を提供できます。
archive(orgId: number, id: number): Observable<Aircraft> {
return this.http.get<Aircraft>('/api/organisations/' + orgId + '/aircrafts/' + id)
.map((data) => {
return data.current = false;
})
.pipe(mergeMap( a => {
return this.http.post<IAircraft>('/api/organisations/' + orgId + '/aircrafts/' + a.id, a).subscribe();
}));
}
エラーTypeError:ブール値「false」でプロパティ「id」を作成できません
restore(orgId: number, id: number): Observable<Aircraft> {
return this.http.get<Aircraft>('/api/organisations/' + orgId + '/aircrafts/' + id)
.pipe(
mergeMap( a => {
a.current = true;
return this.http.post<IAircraft>('/api/organisations/' + orgId + '/aircrafts/' + a.id, a).subscribe();
}));
}
ERROR TypeError: ストリームが必要な場所に無効なオブジェクトを指定しました。Observable、Promise、Array、または Iterable を提供できます。
完全なエラー:
core.js:1448 ERROR TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeToResult (subscribeToResult.js:74)
at MergeMapSubscriber._innerSub (mergeMap.js:138)
at MergeMapSubscriber._tryNext (mergeMap.js:135)
at MergeMapSubscriber._next (mergeMap.js:118)
at MergeMapSubscriber.Subscriber.next (Subscriber.js:92)
at MapSubscriber._next (map.js:85)
at MapSubscriber.Subscriber.next (Subscriber.js:92)
at FilterSubscriber._next (filter.js:90)
at FilterSubscriber.Subscriber.next (Subscriber.js:92)
at MergeMapSubscriber.notifyNext (mergeMap.js:151)
マップを正しく取得できないようです。マップを取り出すと機能しますが、それでは意味がありません。また、さまざまなマップ結果をオブザーバブルにキャストしようとしましたが、API が私のトリックを正しく認識しているようで、同じエラーをスローし続けています。
これがどのように機能するかを誰かに教えてもらえますか?
編集私はそれをいじり続けました-これが最新の化身です:
archive(orgId: number, id: number): Observable<any> {
return this.http.get<Aircraft>('/api/organisations/' + orgId + '/aircrafts/' + id)
.pipe(
mergeMap(a => {
console.log(a.constructor.name);
console.log(a);
a.current = false;
return this.http.post<IAircraft>('/api/organisations/' + orgId + '/aircrafts/' a.id, a);
})); }
console.log(a.constructor.name) は「オブジェクト」を返す - とても便利
console.log(a) が返す