js中promise到底怎么用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中promise到底怎么用相关的知识,希望对你有一定的参考价值。

我举个生活中的例子吧,比如说你去麦当劳买吃的,你下订单后,会给你一个小纸条,这个小纸条相当于你和麦当劳之间的约定,这个小纸条也可以理解为你所定的餐的一个占位符。等麦当劳饭做好了的时候,会吧饭送到你面前,并且把小纸条收走。

这个如果在代码中的话,就意味着,你在执行代码的时候,可能会在未来某个时刻才会取到值(异步),等在值取到以后,会进行一些相应的处理,比如说ajax,这实际上就是promise的一个典型的应用场景。

我刚刚只是说了promise的一个大的应用场景,我觉得只要能把握住这个,具体的API就可以了。

假如你想对它的使用有一个更深入的了解的话,我还可以推荐你一个小文章: javascript基础之-Promise

加油

参考技术A 简单来讲,then 方法就是把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。
而 Promise 的优势就在于这个链式调用。我们可以在 then 方法中继续写 Promise 对象并返回,然后继续调用 then 来进行回调操作。本回答被提问者采纳
参考技术B JS中的promise主要是解决,回调函数层层嵌套引起的混乱样式。
需要举例子的话,由于promise是ES5的语法,可以到W3C去查看。

到底什么是promise?有什么用promise怎么用

相信很多人刚接触promise都会晕,但学会后却离不开它,本文详细介绍一下promise,promise解决的问题,帮助新手快速上手

【扫盲】

什么是promise?

promise是一种约定,并非一种技术,像设计模式一样,跟语言无关、框架无关。js里面实现promise的框架有很多,如:Q、jQuery等。

promise有什么用?

它主要是为了解决js异步回调时业务太乱,尤其嵌套异步时,代码也很丑,维护性也差,错误处理也不能统一这些问题。因此目前也只有js语言会使用promise

 

【案例】

传统JS异步请求是这样的:

技术分享图片

这是一个标准的异步处理方法(回调类型)

当有两层时:

技术分享图片

这时代码就有些难读了,当然平时在使用中大多数是超过两层的:

技术分享图片

问题1:维护困难

当出现多层的时候,代码已经乱的看不下去了,如果业务再复杂一点几乎没法维护了,这个时候如果需求变更,需要更换异步请求的调用顺序,如果遇到这样的代码,简直要崩溃

问题2:重复错误处理

另外里面写了多处错误处理的代码,每一个回调都要处理一次错误,显然代码太臃肿,还容易出错。

问题3:并行处理

如果以上异步操作突然要改成并行处理,并且要捕获到全部处理完事件,那么就要把代码拉平,还要给计数器来判断异步是否全部返回

 

【解决方案】

看看promise是怎么优雅的解决以上问题的

假设a、b、c、d4个方法都返回promise对象,以上代码将会变为:

技术分享图片

这时代码由横向变成了纵向,好看很多。而且错误统一在最后面处理(任何一个分支出错都会走catch)非常方便

另外如果上一个then返回了数据,下一个then会接收到上一个then返回的数据,如:

技术分享图片

 

 then分支可以返回promise也可以返回数据:

 技术分享图片

并行的情况:

如需要并行处理需要用all方法:

 

 技术分享图片

这是的Promise是指实现Promise的框架,如果用的Q就是Q.all,原生的是Promise.all

这就实现了并行处理

 

这是promise的基本用法,更多功能待大家自己研究

以上是关于js中promise到底怎么用的主要内容,如果未能解决你的问题,请参考以下文章

promise.all 怎么用

怎么用promise实现异步控制

JS中promise对象的作用与使用

理解JS中的Promise对象

js的promise如何递归调用?

前端异步技术之Promise