Multithreading 阻止当前线程RXJS

Multithreading 阻止当前线程RXJS,multithreading,typescript,asynchronous,rxjs,rxjs5,Multithreading,Typescript,Asynchronous,Rxjs,Rxjs5,我有一个返回可观察的方法,如下所示: public getCpuUsage(): Observable<string> { return Observable.create((observer: Observer<string>) => { let plugin = new Plugin(); plugin.open(); plugin.OnEvent = (info: string, ack: string

我有一个返回可观察的方法,如下所示:

public getCpuUsage(): Observable<string>  {
    return Observable.create((observer: Observer<string>) => {
        let plugin = new Plugin();
        plugin.open();
        plugin.OnEvent = (info: string, ack: string, nak: string) => {
            console.log("CPU [" + info + "].param1[" + ack + "].param2[" + nak + " ]");
            observer.next(info);
            plugin.close();
            observer.complete();
        };
        plugin.executeCommand('getCPUUsage');
    });
}
在日志a中,请参见:
第一个日志:“调用此行”
第二个日志(1-2秒后,因为调用了回调):'Result:${value\u cpu\u info}'

如何阻止当前线程,直到从可观察到的结果?方法executeInfo()必须返回正确的值

阻止当前线程RXJS

JavaScript中只有一个线程。你可以用它来阻止它

while(true) {
 // insert break logic here
}

但是我强烈建议你重新考虑这个要求。

你不能。这就是观察的全部要点:表示异步操作的结果。executeInfo()只能返回可观察的(或承诺)。不要试图阻止当前线程-javascript只有一个线程,整个应用程序将被卡住。Make executeInfo()返回一个可观察值,正如JB Nizet在上面的评论中所建议的那样。对于一个
下一个:
不从其回调传播返回值。此外,虽然可观测数据可以工作,但这真的让人觉得它应该是一个承诺。正如大家已经说过的,阻止JavaScript的唯一线程是非常不可取的。也许你必须在你的实际代码中,但你不需要阻止,以涵盖问题中显示的用例。不要试图阻止当前线程-javascript只有一个线程,整个应用程序将被卡住。谢谢,我更改了我的应用程序逻辑。
while(true) {
 // insert break logic here
}