JS异步执行结果获取的方法有哪些

  介绍

这篇文章主要介绍JS异步执行结果获取的方法有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

<强>回调

这是最传统的方法了,也是最简单的,如下代码

function  foo (cb), {   ,setTimeout (function (), {   ,cb(1);//,通过参数把结果返回   ,},2000);   }      foo(函数(结果),{,//调用foo方法的时候,通过回调把方法返回的数据取出来   ,console.log(结果);   })

<>强承诺

承诺是ES6里加入的新对象,它可以把一个异步执行的方法封装成支持同步操作的方法,结合async/等待完美、下面说一下它是怎么封装一个方法的

function  foo (), {   ,return  new 承诺((解决,,拒绝),=祝辞,{   ,setTimeout (function (), {   解决(1);才能,//,通过,resolve 参数把成功的结果返回//才能,拒绝(& # 39;错误# 39;);,//,通过,reject 参数把错误信息返回   ,},2000);   ,})   }//,调用   foo ()   ,不要犹豫(result =祝辞,console.log(结果))   ,.catch (error =祝辞,console.log(错误));

从上面例子可以看的出,保证取值使用的是区间()函数,异常处理用的是.catch()函数

<强> rxjs

rxjs是一种设计思想的javascript语言的实现框架,rx原名是:ReactiveX

官网是http://reactivex。io/

开源地址https://github.com/ReactiveX/rxjs

rx口号是万物皆是流,跟java里万物皆对象挺像的,它的api也全都是对流进行操作,写起来还是很爽的,下面看一下rxjs怎么封装一个异步执行操作

注意,用这货首先要安装它在自己的项目里,然后再引入依赖,如果是浏览器环境可以引入js

import  {, Observable },得到& # 39;rxjs& # 39;;      function  foo (), {   ,return  new 观察(观察),=祝辞,{   ,setTimeout (function (), {   observe.next才能(1),,//,通过,observe.next(),方法把成功的结果返回//才能,observe.error(& # 39;错误# 39;);,//,通过,observe.error 方法把错误信息返回   ,},2000);   ,})   }//,调用   foo ()   ,.subscribe (   ,result =祝辞console.log(结果),   ,error =祝辞console.log(错误)   之前,);

可以看到它跟承诺很像,就是变了几个参数名,不过它可比承诺强大多了

下面来说一下rxjs里的取消操作,没错请求还能取消,这骚操作也只有rxjs能实现了

import  {, Observable },得到& # 39;rxjs& # 39;;      function  foo (), {   ,return  new 观察(观察),=祝辞,{   ,setTimeout (function (), {   observe.next才能(1),,//,通过,observe.next(),方法把成功的结果返回//才能,observe.error(& # 39;错误# 39;);,//,通过,observe.error 方法把错误信息返回   ,},2000);   ,})   }//,调用,方法里2 s后返回数据   const  o =, foo () .subscribe (   ,result =祝辞console.log(结果),   ,error =祝辞console.log(错误)   );//,设置一个定时器1 s后取消订阅,这样控制台里就不会打印出结果了,这个请求也就被取消了   setTimeout (function (), {   ,o.unsubscribe();,//,取消订阅   },,1000);

rxjs除了取消执行外,还有一个牛逼的功能,循环执行,对一个请求可以一直接收它返回的结果,看下下面的例子就明白了

import  {, Observable },得到& # 39;rxjs& # 39;;      function  foo (), {   ,return  new 观察(观察),=祝辞,{   ,let  count =, 0;   ,setInterval(函数(),{   observe.next才能(计数+ +);,//,通过,observe.next(),方法把成功的结果返回//才能,observe.error(& # 39;错误# 39;);,//,通过,observe.error 方法把错误信息返回   ,},1000);   ,})   }//,调用   foo () .subscribe (   ,result =祝辞console.log(结果),,//,这行会每隔1 s打印一条数据   ,error =祝辞console.log(错误)   );

因为在ReactiveX里一切皆是流,所以也就有很多对流操作的api,比如争吵,地图等,类似于java8里的流的操作,下面看一下例子说明白了

import  {, Observable },得到& # 39;rxjs& # 39;;//,对流操作要引入操作类   import {,地图,filter },得到& # 39;rxjs/运营商# 39;;      function  foo (), {   ,return  new 观察(观察),=祝辞,{   ,let  count =, 0;   ,setInterval(函数(),{   observe.next才能(计数+ +);,//,通过,observe.next(),方法把成功的结果返回//才能,observe.error(& # 39;错误# 39;);,//,通过,observe.error 方法把错误信息返回   ,},1000);   ,})   }//,调用   const  o =, foo ();   o.pipe (   ,过滤器((价值:号码),=祝辞,value  %, 2,===, 0),   ,地图(价值:数字),=祝辞,value  *=, 2)   ).subscribe (data =祝辞,console.log(数据),

JS异步执行结果获取的方法有哪些