在 Rxjs 6 中使用 concat 和管道的正确方法是什么?
What is the correct way to use concat along with pipe in Rxjs 6?
我有一个服务器调用可能 return HTTP 202
。受 线程的影响,我有以下内容:
this.http.get(url)
.pipe(
map(response => {
if (response.status === 202) {
throw response;
}
return response;
}),
retryWhen(errors => {
return errors.pipe(
delay(1000),
take(3),
concat(response => Observable.throw('Retries exceeded'))
);
}),
catchError(handleError)
);
收到关于使用 concat
的 deprecated
警告。我知道新的 concat
在 rxjs
而不是 rxjs/operator
.
但是,在这里使用新的 static concat
运算符的正确方法是什么?
找到以下from this site
import { concat } from 'rxjs/operators';
a$.pipe(concat(b$, c$));
// becomes
import { concat } from 'rxjs';
concat(a$, b$, c$);
我无法理解我的示例代码中连接了哪些 Observable
?
更新 1
将代码更改为:
return concat(this.http.get(url)
.pipe(
map(response => {
if (response.status === 202) {
throw response;
}
return response;
}),
retryWhen(errors => {
return errors.pipe(
delay(1000),
take(3)
);
}),
catchError(handleError)
), response => Observable.throw('Retries exceeded'));
但这会导致:
core.js:1598 ERROR TypeError: You provided 'function (response) { return rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"].throw('Retries exceeded'); }' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:41)
at subscribeToResult (subscribeToResult.js:6)
at
管道运算符只是接受可观察对象和 return 可观察对象的函数。所以你可以像这样使用 concat
工厂函数:
retryWhen(errors => {
return errors.pipe(
delay(1000),
take(3),
o => concat(o, throwError('Retries exceeded'))
);
})
此外,concat
运算符将被 with/renamed 替换为 concatWith
。参见 this issue。
我有一个服务器调用可能 return HTTP 202
。受
this.http.get(url)
.pipe(
map(response => {
if (response.status === 202) {
throw response;
}
return response;
}),
retryWhen(errors => {
return errors.pipe(
delay(1000),
take(3),
concat(response => Observable.throw('Retries exceeded'))
);
}),
catchError(handleError)
);
收到关于使用 concat
的 deprecated
警告。我知道新的 concat
在 rxjs
而不是 rxjs/operator
.
但是,在这里使用新的 static concat
运算符的正确方法是什么?
找到以下from this site
import { concat } from 'rxjs/operators';
a$.pipe(concat(b$, c$));
// becomes
import { concat } from 'rxjs';
concat(a$, b$, c$);
我无法理解我的示例代码中连接了哪些 Observable
?
更新 1
将代码更改为:
return concat(this.http.get(url)
.pipe(
map(response => {
if (response.status === 202) {
throw response;
}
return response;
}),
retryWhen(errors => {
return errors.pipe(
delay(1000),
take(3)
);
}),
catchError(handleError)
), response => Observable.throw('Retries exceeded'));
但这会导致:
core.js:1598 ERROR TypeError: You provided 'function (response) { return rxjs__WEBPACK_IMPORTED_MODULE_2__["Observable"].throw('Retries exceeded'); }' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
at subscribeTo (subscribeTo.js:41)
at subscribeToResult (subscribeToResult.js:6)
at
管道运算符只是接受可观察对象和 return 可观察对象的函数。所以你可以像这样使用 concat
工厂函数:
retryWhen(errors => {
return errors.pipe(
delay(1000),
take(3),
o => concat(o, throwError('Retries exceeded'))
);
})
此外,concat
运算符将被 with/renamed 替换为 concatWith
。参见 this issue。