【问题标题】:Why promise are slower in rendering than observable even Observables are lazy whereas promises are not为什么即使 Observable 是惰性的,而 Promise 却不是,promise 的渲染速度也比 observable 慢
【发布时间】:2020-09-21 11:24:46
【问题描述】:

与 promises 一样,Observables 也遵循推送模型。然而 observable 是懒惰的,因为它们需要一些订阅者来获取数据。

let Rx = require('rxjs');
let isTrue = true;

let promise = new Promise((resolve, reject) => {
    if (isTrue) {
        resolve('Hi Promise')
    } else {
        reject(new Error('Message error in promise'))
    }
})

let data$ = new Rx.Observable((observer) => {
    if (isTrue) {
        observer.next('Hi Observable');
    } else {
        observer.error(new Error('error observer'))
    }
})


// DATA Collector

console.log(promise, data$)
//Promise { 'Hi Promise' } Observable { _isScalar: false, _subscribe: [Function] }

promise.then((data) => {
    console.log(data).   //Hi Promise
}).catch((err) => {
    console.log(err)
})

data$.subscribe((data) => {
    console.log(data);    // output - ‘Hi Observable’
});

输出

Promise { 'Hi Promise' } Observable { _isScalar: false, _subscribe: [Function] }
Hi Observable
Hi Promise

在 promise 的情况下,它们立即执行并且数据可用。但是,除非订阅,否则数据在 observable 中不可用。

还是先打印 Observable 部分,然后再打印 promise 部分?

【问题讨论】:

    标签: javascript node.js promise observable


    【解决方案1】:

    正如docs中指出的那样:

    订阅 Observable 类似于调用函数。 有些人声称 Observables 是异步的。这不是真的。

    因此您需要以异步方式传递消息:

            setTimeout(() => {
                observer.next('Hi Observable');
            })
    

    否则,所有消息都将同步。

    此外,这与标准 EventEmitter 的行为相同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 2018-10-20
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2016-08-07
      相关资源
      最近更新 更多