我的代碼:https ://stackblitz.com/edit/rxjs-fgzw2i?devtoolsheight=60&file=index.ts
export class myCalss {
sub$: BehaviorSubject<number>;
constructor() {
this.sub$ = new BehaviorSubject(0);
}
test() {
from([1,2,3,4]).subscribe(
this.sub$.next, // num => this.sub$.next(num)
console.log
)
}
}
這是我的代碼。代碼中有錯誤,但我不知道為什么。如果此代碼有任何問題,請告訴我。尤其是在 subscribe 函式內部傳遞值時,我很好奇要將傳遞的值傳遞給 sub$ 的部分。通常,我撰寫代碼如下。
num => this.sub$.next(num)
但是我發現我也可以這樣寫,不是嗎?
this.sub$.next
uj5u.com熱心網友回復:
但是我發現我也可以這樣寫,不是嗎?this.sub$.next
簡短的回答:很遺憾,沒有。雖然這個語法本身this并沒有錯,但是如果你使用這種“高階函式”語法,你會得到一個錯誤,因為范圍會丟失。
長答案:
Subjectrxjs 庫的類this在某些時候使用關鍵字,因此將函式作為引數傳遞給subscribe使其失去正確的范圍。考慮這個例子:
class MockSubject {
next(value) {
console.log('A function not referring `this` ' value);
}
}
這是您嘗試過的用法示例:
mockSubject = new MockSubject;
test() {
from([1, 2, 3, 4]).subscribe(
this.mockSubject.next, // num => this.sub$.next(num)
console.log,
);
}
這個例子沒有得到你得到的錯誤,因為next類的方法MockSubject沒有參考this物件。當然,你無法知道類中的函式是否使用this關鍵字,所以我的建議是避免使用這種語法。
(stackblitz 中的完整示例來自您的:https ://stackblitz.com/edit/rxjs-1jrzbf?file=index.ts )
最后一個提示,不要將 subscribe 方法與兩個回呼一起使用,因為這種方式已被棄用 - 請改用PartialObserver物件,如下所示:
{
next: num => this.sub$.next(num), // num => this.sub$.next(num),
error: console.log
}
uj5u.com熱心網友回復:
在這種情況下你不能這樣做,因為你Subject的型別是<number>. 如果我沒記錯的話,rxjs 7你可以this.sub$.next()不帶引數地打電話,但Subject必須是 type <void>。它的唯一用途是發出的值沒有任何重要性的情況,重要的是發出的值,即使它是nothing. 根據docs,一個示例將是一個回應式timer的,無論如何我都看不到重點,您為什么要用空論點來稱呼它,對于沒有看過開發程序的人來說不清楚。與 .組合使用時會導致問題takeUntil。此外,這可能會因為strict mode. 它應該像下面一樣,如果型別是<number>......
無論如何,您已經建立了一個發出特定值的邏輯,并且應該以某種方式處理該值,但是next()當發出的值無關緊要時使用不帶引數。即使您可以使用它,在這種情況下也是不夠的。
采用
test() {
from([1, 2, 3, 4]).subscribe({
next: (data) => {
this.sub$.next(data);
},
});
}
要不就
test() {
from([1, 2, 3, 4]).subscribe((data) => {
this.sub$.next(data);
});
}
uj5u.com熱心網友回復:
你可以做:
export class MyCalss {
sub$: BehaviorSubject<number> = new BehaviorSubject(0);
number$ = from([1, 2, 3, 4]).pipe(
tap((num) => console.log),
tap((num) => this.sub$.next)
);
test() {
this.number$.subscribe();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/478547.html
標籤:javascript 有角度的 rxjs
上一篇:用相應的變數值替換變數名
下一篇:在Swift中將字典寫入檔案
