如何解决toPromise 不返回最后观察到的值
这是一个可以与 ts-node 一起运行的示例。为什么显示在结果2而不是3中。
import { interval,Subject } from 'rxjs';
import { startWith,takeUntil,tap,map } from 'rxjs/operators';
const done = new Subject();
let times = 0;
function test() {
return interval(5000).pipe(
startWith(0),map(() => times++ ),tap(n => {
console.log(n);
if (n === 3) {
done.next();
}
}),takeUntil(done),).toPromise();
}
test().then(n => {
console.log('result: ',n);
}).catch(err => {
console.error('error: ',err.message);
});
输出是:期望结果:3
0
1
2
3
result: 2
解决方法
这是因为 takeUntil : 发出源 Observable 发出的值,直到通知器 Observable 发出一个值。 所以当你调用 'done' 的 next 方法时,你实际上停止了排放并完成可观察的,所以最后'3'永远不会被排放。 This 是一个很好的例子,与您的案例非常相似,它展示了 takeUntil 行为。 如果您想发出“3”,也许您可以将条件更改为:
if (n > 3) {
done.next();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。