【发布时间】:2018-11-07 20:42:55
【问题描述】:
考虑以下 Typescript / rxjs 代码:
import { range } from 'rxjs';
range(1, 5).subscribe(async (num) => {
await longLastingOperation(num);
})
function longLastingOperation(num) {
console.log('starting', num);
return new Promise((resolve) => {
setTimeout(() => {
console.log('done with', num);
resolve();
}, Math.random() * 1000);
});
}
每个发出的值都会触发一个随机持续时间的持久操作。控制台输出是不可预测的,看起来类似于:
starting 1
starting 2
starting 3
starting 4
starting 5
done with 2
done with 5
done with 1
done with 4
done with 3
现在,我想为每个发出的值“序列化”执行持久操作。例如,我希望 longLastingOperation(2) 在开始之前等待 longLastingOperation(1) 完成。
我希望每次都得到一个看起来完全一样的输出:
starting 1
done with 1
starting 2
done with 2
starting 3
done with 3
starting 4
done with 4
starting 5
done with 5
如何使用 rxjs 和 observables 实现这一目标?
【问题讨论】:
标签: javascript typescript rxjs