当我发出下一个值时等待异步订阅

Wait async subscriptions when I emit next value

我有下一个例子

import { Subject } from "rxjs";

const subject = new Subject();

subject.subscribe(() => new Promise(res => {
  setTimeout(() => console.log('!! 1'), 500);
}))

subject.subscribe(() => new Promise(res => {
  setTimeout(() => console.log('!! 2'), 1000);
}))

console.log('>>> START')
subject.next();
console.log('<<< FINISH')

控制台看起来像

>>> START
<<< FINISH
!! 1
!! 2

我想要以下行为

>>> START
!! 1
!! 2
<<< FINISH

我可以达到预期的行为还是应该使用其他方法?

好的,这应该可以。我只是强制了 Observables 的行为。需要明确的是,可观察对象是异步的 javascript 并且需要在异步模式下共享值,以便您可以通过主题 'emit' 一个新值,并且所有可观察对象都可以在执行其他任务时看到该值。此代码完全按照您的要求执行,但在同一时间和地点发出一个值并等待该值是没有意义的,要实现这一点,您可能应该考虑另一种编码此模块的方法。

我说的是,我已经测试了这个片段并且它有效,希望这会有所帮助

import { Subject } from "rxjs";
const subject = new Subject();

async function nextValue(value) {
    return new Promise((resolve, reject) => {
        subject.subscribe(subValue => {
            setTimeout(() => {
                 console.log(subValue);
                 resolve();
            }, 500);
        }, err => reject(err));
        subject.next(value);
    });
}    

(async () => {
    console.log('>>> START');
    await nextValue('myValue');
    console.log('<<< FINISH');
})();