Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么承诺的呈现速度比可观察的慢?即使可观察的是懒惰的,而承诺不是_Javascript_Node.js_Promise_Observable - Fatal编程技术网

Javascript 为什么承诺的呈现速度比可观察的慢?即使可观察的是懒惰的,而承诺不是

Javascript 为什么承诺的呈现速度比可观察的慢?即使可观察的是懒惰的,而承诺不是,javascript,node.js,promise,observable,Javascript,Node.js,Promise,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

与承诺一样,可观测数据也遵循推送模型。然而,可观察对象是懒惰的,因为他们需要一些订户来获取数据

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
在承诺的情况下,它们立即执行,并且数据可用。然而,除非订阅,否则无法获得可观测数据

还是先打印可观察部分,然后打印承诺部分?

如中所述:

订阅可观察对象类似于调用函数。 有些人声称可观测的是异步的。事实并非如此

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

setTimeout(()=>{
观察者。下一步(“高可观察”);
})
否则,所有消息都将同步

此外,这与标准

中指出的行为相同:

订阅可观察对象类似于调用函数。 有些人声称可观测的是异步的。事实并非如此

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

setTimeout(()=>{
观察者。下一步(“高可观察”);
})
否则,所有消息都将同步

此外,这与标准行为相同