RxJs - 多个订阅者等待相同的承诺结果

RxJs - Multiple subscribers waiting on the same result of a promise

如果给定一个新的解决方案,我如何让多个订阅者等待同一个承诺解决?

doSomething = () => {
  return new Promise((resolve) => {
     setTimeout(() => resolve(Math.random(), 1000)
  })
}

// how to define obs?

obs.subscribe(v => console.log(v)); // 0.39458743297857473
obs.subscribe(v => console.log(v)); // 0.39458743297857473
obs.subscribe(v => console.log(v)); // 0.39458743297857473

setTimeout(() => obs.subscribe(v => console.log(v)), 2000); // 0.9485769395265746

我希望 observable 在第一个订阅者出现之前保持冷态,然后在结果流式传输给所有后续并发订阅者后再次变冷。我基本上不希望对相同的底层函数有任何并发​​请求。

您可以使用 defer as the creation-operator and then share 流:

doSomething = () => {
  return new Promise((resolve) => {
     setTimeout(() => resolve(Math.random(), 1000));
  });
}

const obs = Rx.Observable
    .defer(doSomething)
    .share();

obs.subscribe(console.log); // resolve #1
obs.subscribe(console.log); // resolve #1
obs.subscribe(console.log); // resolve #1

setTimeout(() => obs.subscribe(console.log), 2000); // resolve #2
<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>