有人可以解释Angular Promise
和之间的区别Observable
吗?
每个例子都有助于理解这两种情况.在什么情况下我们可以使用每个案例?
通过使用Http,我们调用一个执行网络调用并返回http observable的方法:
getCustomer() {
return this.http.get('/someUrl').map(res => res.json());
}
Run Code Online (Sandbox Code Playgroud)
如果我们采用这个可观察的并添加多个订阅者:
let network$ = getCustomer();
let subscriber1 = network$.subscribe(...);
let subscriber2 = network$.subscribe(...);
Run Code Online (Sandbox Code Playgroud)
我们想要做的是确保这不会导致多个网络请求.
这可能看起来像是一个不寻常的场景,但实际上很常见:例如,如果调用者订阅了observable以显示错误消息,并使用异步管道将其传递给模板,那么我们已经有两个订阅者.
在RxJs 5中这样做的正确方法是什么?
也就是说,这似乎工作正常:
getCustomer() {
return this.http.get('/someUrl').map(res => res.json()).share();
}
Run Code Online (Sandbox Code Playgroud)
但这是在RxJs 5中这样做的惯用方式,还是我们应该做其他事情呢?
注意:根据Angular 5 new HttpClient
,.map(res => res.json())
所有示例中的部分现在都没用,因为现在默认采用JSON结果.
您是否需要取消订阅Angular 2 http调用以防止内存泄漏?
fetchFilm(index) {
var sub = this._http.get(`http://example.com`)
.map(result => result.json())
.map(json => {
dispatch(this.receiveFilm(json));
})
.subscribe(e=>sub.unsubscribe());
...
Run Code Online (Sandbox Code Playgroud) 如何在Angular2中取消订阅?RxJS似乎有一个dispose方法,但我无法弄清楚如何访问它.所以我有代码可以访问EventEmitter并订阅它,如下所示:
var mySubscription = someEventEmitter.subscribe(
(val) => {
console.log('Received:', val);
},
(err) => {
console.log('Received error:', err);
},
() => {
console.log('Completed');
}
);
Run Code Online (Sandbox Code Playgroud)
我mySubscription
该如何取消订阅?
在角度应用程序中,我们有ngOnDestroy()
一个组件/指令的生命周期钩子,我们使用这个钩子取消订阅observables.
我想清除/ @injectable()
服务中创建的destory observable .我看到一些帖子说ngOnDestroy()
可以在服务中使用.
但是,这是一个很好的做法,只有这样才能这样做,什么时候会被召唤?有人请澄清一下.
我正在使用Angular Meteor 2创建一个简单的UI.
1)我有一个顶部导航栏组件,其中有一个"注销"按钮.
2)点击"退出"按钮后,它会重定向到"登录".
3)然后我在控制台中看到此错误:EXCEPTION: Attempt to use a destroyed view: detectChanges
例外:
EXCEPTION: Attempt to use a destroyed view: detectChanges
browser_adapter.js:77 EXCEPTION: Attempt to use a destroyed view: detectChangesBrowserDomAdapter.logError @ browser_adapter.js:77BrowserDomAdapter.logGroup @ browser_adapter.js:87ExceptionHandler.call @ exception_handler.js:57(anonymous function) @ application_ref.js:265schedulerFn @ async.js:123SafeSubscriber.__tryOrUnsub @ Subscriber.js:225SafeSubscriber.next @ Subscriber.js:174Subscriber._next @ Subscriber.js:124Subscriber.next @ Subscriber.js:88Subject._finalNext @ Subject.js:128Subject._next @ Subject.js:120Subject.next @ Subject.js:77EventEmitter.emit @ async.js:112onError @ ng_zone.js:120onHandleError @ ng_zone_impl.js:66ZoneDelegate.handleError @ angular2-polyfills.js:394Zone.runTask @ angular2-polyfills.js:323ZoneTask.invoke @ angular2-polyfills.js:490
browser_adapter.js:77 STACKTRACE:BrowserDomAdapter.logError @ browser_adapter.js:77ExceptionHandler.call @ exception_handler.js:59(anonymous function) @ application_ref.js:265schedulerFn @ async.js:123SafeSubscriber.__tryOrUnsub …
Run Code Online (Sandbox Code Playgroud) 从http订阅中取消订阅Angular2服务的最佳做法是什么?
目前我这样做,但我不确定这是否是最好的方式.
import { Injectable } from "@angular/core";
import { Http } from "@angular/http";
import { Subject } from "rxjs/Subject";
import { ISubscription } from "rxjs/Subscription";
@Injectable()
export class SearchService {
private _searchSource = new Subject<any>();
public search$ = this._searchSource.asObservable();
constructor(private _http: Http) {}
public search(value: string) {
let sub: ISubscription = this._http.get("/api/search?value=" + value)
.map(response => <any>response.json())
.do(data => this._searchSource.next(data))
.finally(() => sub.unsubscribe()).subscribe();
}
}
Run Code Online (Sandbox Code Playgroud) 如何取消/中止所有挂起的HTTP请求的角度4+.
有一种unsubscribe
方法可以取消HTTP请求,但是如何一次取消所有待处理的请求.
特别是路线变化时.
我做了一件事
ngOnDestroy() {
this.subscription.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)
但如何在全球实现这一目标
有任何想法吗?
在我的角度应用程序中,我提出了一种情况,只有在输入绑定到更改时才应调用ngOnchanges.那么,有没有办法在ngOnInit之前停止执行ngOnChanges.有没有办法实现这一目标.提前致谢.
是否有任何工具或技术来检测"留守"或"当前活着"的可观察量,订阅.
刚刚发现一个非常令人讨厌的内存泄漏,其中组件由于缺少"取消订阅"调用而保持活动状态.我读到了关于"takeUntil"的方法,看起来还不错. /sf/answers/2882401441/
但是我仍然想知道是否有任何工具(浏览器扩展等).据我所知,Augury并未涵盖这一领域.
所有输入都非常感谢.
angular ×10
rxjs ×7
javascript ×2
rxjs5 ×2
typescript ×2
memory-leaks ×1
observable ×1
promise ×1
rxjs6 ×1
unsubscribe ×1