Javascript中observable和promises的区别介绍(附实例)

57 阅读2分钟

这篇博客涵盖了Javascript中observable和promises的区别,并附有实例。

observable和promises是用来处理javascript中的异步调用的。这将有助于在前端应用程序(如Angularreactvuejs)以及服务器端应用程序(如node环境)中消费其余的API调用。
Promises是javascript中最新的功能,它被用来做异步操作 RXJS框架中的Observable被用来做许多异步调用,能够提供取消操作。

ES6承诺不可取消

这些主要是用来避免回调地狱。如果操作成功,意味着承诺得到解决,结果是一个值,否则操作抛出一个错误信息,承诺拒绝,结果是一个错误信息 ES6承诺是不可取消的。诺言对于不可取消的单一异步操作是很有用的,首先诺言使用new Promise声明,提供里面的同步代码。

var myproimse = new Promise((resolve, reject) => {  
  if (success) {  
    resolve("single object is returned");  
  }  
  else {  
    reject("Failure message"));  
  }  
});  

一旦承诺被定义,你需要提供then和catch来捕捉成功和错误事件。

promise.then((success) => console.log(success))      // single object is returned  
       .catch((err) => console.log(error));    // Failure message  

then中的回调将在承诺解决时执行,catch将在错误信息时执行。

RXJS可观察事件是可取消的

这适用于数据流中的多个事件,例如按钮点击事件,这将不会被调用,直到用户发起的行动。其结果是成功、失败和完成是最小的事件,但有多个事件,所以我们必须为每个事件提供回调。
下面是一个创建可观察对象的例子,它定义了三个事件 下一个事件有值 错误事件有失败信息 完成事件没有参数

import { Observable } from 'rxjs';  
  
const observableObject = new Observable(myobserver => {  
  myobserver.next("successvalue");  
  myobserver.error("failed");  
  myobserver.complete();  
});  

观察对象使用subscribe来订阅成功、错误和完成的三个回调。

console.log('Start ');  
observableObject.subscribe({  
  next(value) { console.log('next: ' + value); },  
  error(err) { console.error('error: ' + err); },  
  complete() { console.log('complete:'); }  
});  
console.log('End');  

而输出是

Start  
next: successvalue  
error: failed  
End  

JavaScript中ES6 Promise和RXJS Observable的区别

诺言可观察
异步性异步调用
一旦启动异步调用,就不能取消可以使用unsubscribe()方法取消请求
总是返回单一值--要么承诺被解决,要么拒绝错误信息基于失败、成功、重试、取消操作的多个值
只对单一事件起作用在时间进程中支持多个事件流
重试是不可能的使用重试操作者可以重试,使用基于条件操作者的retryWhen。
早期加载并返回单一结果,要么成功要么失败懒加载,在需要时返回多个值
不支持运算符支持数组类型的操作符-map,filter,forEach,reduce等。