Angular RxJS-订户与可观察和订阅有何不同?

Angular RxJS-订户与可观察和订阅有何不同?,angular,rxjs,Angular,Rxjs,我一直在尝试寻找一个将Observable包装到订阅者中以监视异步调用状态的示例,例如加载、完成或出错。您能提供一个简短的示例吗?不确定这是否是您的意思,但您可以像这样包装一个异步http调用 const httpStream = Observable.create(observer => { fetch('http://server.com') .then(response => response.json()) .then(data =>

我一直在尝试寻找一个将Observable包装到订阅者中以监视异步调用状态的示例,例如加载、完成或出错。您能提供一个简短的示例吗?

不确定这是否是您的意思,但您可以像这样包装一个异步http调用

const httpStream = Observable.create(observer => {

    fetch('http://server.com')
      .then(response => response.json()) 
      .then(data => {
        observer.next(data); // if http call provides progress as well as completion
                             // these can all be pushed with observer.next()
        observer.complete();
      })
      .catch(err => observer.error(err));

  });

  httpStream.subscribe(data => console.log(data));
当然,如果它真的是你想要包装的,你可以直接包装

var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
编辑:如果您使用的是angular HttpClient,则无需对其进行包装,因为它已经是可观察的。要获得进度更新和最终响应,应该可以使用以下方法

const req = new HttpRequest('POST', 'http://api.server.com', body, {
    reportProgress: true
});

this._http.request(req)
.filter((event) => event.type === HttpEventType.UploadProgress || event instanceof HttpResponse)
.map((event) => {
    if (event.type === HttpEventType.UploadProgress) {
        const percentDone = Math.round(100 * event.loaded / event.total);
        return { type: 'uploadProgress', percentDone };
    } else if (event instanceof HttpResponse) {
        return { type: 'httpResponse', status: event.status };
    } 
})
.subscribe((response) => {
    if (response.type === 'uploadProgress') {
        console.log(`upload still in progress - percent done = ${response.percentDone}%`);
    } else {
        console.log(`upload completed  - status = ${response.status}`);
    }
});

如果事实上你只想知道所有的请求何时完成,而且不需要每个人的进度更新,而不是将请求推送到数组中。更好的选择可能是使用forkJoin,这类似于承诺。所有这些都是在所有子可观察对象完成后,您才从可观察对象获得输出-

顺便说一句,这是标记为
rxjs
:)的第5000个问题。酷!似乎今天是我的幸运日:)。如果我已经有了
let obs=http.get();让sub=obs.subscribe()
。我还需要引入一个单独的观察者吗?不,如果您已经在使用Angular的http observable之类的工具,那么您不需要将其包装到另一个observable中。那么,您是否只是想知道如何使用Angular的HttpClient来显示http调用的进度和完成情况的详细信息?我想监控进度,但处理返回的
obervable
subscription
,但不在实际调用中。e、 g.
subs.push(obs | sub)
,然后在
subs
数组上工作,如果有任何元素正在进行,则显示忙指示器。