Here is an example that can be run with ts-node. Why is the value displayed in result 2 instead of 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);
});
output is: what expecting result: 3
0
1
2
3
result: 2
question from:
https://stackoverflow.com/questions/65834915/topromise-doesnt-return-last-observed-value 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…