我想知道是否可以只进行HTTP POST请求,而无需订阅回调函数,就像这样:
this._http.post('/list/items/update?itemId=' + itemId + "&done=" + done, null);
不要这样做
this._http.post('/list/items/update?itemId=' + itemId + "&done=" + done, null)
.subscribe();
我想知道是否可以只进行HTTP POST请求,而无需订阅回调函数,就像这样:
this._http.post('/list/items/update?itemId=' + itemId + "&done=" + done, null);
不要这样做
this._http.post('/list/items/update?itemId=' + itemId + "&done=" + done, null)
.subscribe();
我正在使用 Promise 转换(需要 rxjs):
import 'rxjs/add/operator/toPromise';
@Injectable()
export class SomeService {
....
post(sp: Seatplace, date?: Date) : Promise<any> {
return this.http.post(
'/list/items/update?itemId=' + itemId + "&done=" + done,
null
).toPromise();
}
}
我曾经有同样的疑问,但后来我发现其实我并不在乎是否有人订阅了这个可观察对象。我只是想无论如何都发送POST请求。这就是我的解决方法:
postItem(itemData) {
var observable = this.http.post('/api/items', itemData)
.map(response => response.json()) // in case you care about returned json
.publishReplay(); // would be .publish().replay() in RxJS < v5 I guess
observable.connect();
return observable;
}
一旦调用connect()
,请求就会被发送。但是,如果需要,postItem
的调用者仍然可以订阅一个可观察对象。由于使用了publishReplay()
而不是publish()
,因此即使在POST请求完成后,仍然可以进行订阅。
Observable
强制转换为连接它:const observable = this.http.post<T>('/api/items', itemData).pipe(publishReplay()); (observable as ConnectedObservable<T>).connect(); return observable;
- kremerd正如 @picci 所说,普通的 observables 都是 cold observables。如果您想发出请求,可以尝试使用 @lex82 的方法,这里是一个rxjs 6的草案:
import { ConnectableObservable } from "rxjs"
import { publish } from "rxjs/operators";
const myConnectableObservable: ConnectableObservable<any> = this._http.post('/list/items/update?itemId=' + itemId + "&done=" + done, null).pipe(publish()) as ConnectableObservable<any>;
myConnectableObservable.connect();
这基本上就像订阅但不进行真正的订阅。
https://blog.danlew.net/2018/09/25/connectable-observables-so-hot-right-now/
public getEmployerListFromService() {
const url = `/list/items/update?itemId=`;
return this.http.get<any>(url).toPromise().then(response => {
console.log(response);
})
}
并通过以下方式调用此方法:
this.service.getEmployerListFromService();
2oppin
在下面所示,你实际上是可以做到的,所以说“我不认为你能够做到”这种说法是错误的。 - Sasuke UchihatoPromise
实际上是在 它的实现 中订阅了 Observable。 - Picci