大家好,又见面了,我是你们的朋友全栈君。
Promise是异步编程的一中解决方案,最早是由社区提出的,es6中正式的将其纳入,他是一个对象,可以获取到异步的操作,他相比传统的回调函数,更加的强大和合理,避免了回调地狱。
所谓的Promise,简单的来说就是一个可以存放未来才能结束的任务或者事件。
1. Promise实列有三个状态:
– pending (进行中)
– resolved (成功)
– rejected(失败)
当要处理某个任务的时候,promise的状态是pending,任务完成是状态就变成了resolved,任务失败状态就变成了rejected。
2.Promise实列有俩个过程:
– pending — resolved (进行到成功)
– pending — rejected (进行到失败)
状态一旦改变就不能在变成其他的状态。
3. Promise方法:
常用的方法有5中:then()、catch()、all()、race()、finally()。
1.then()
接受俩个俩个回调函数作为参数,第一个参数表示成功的时候去执行,第二参数表示失败的时候去执行,返回的时一个新的promise的实列。
2.catch()
相当于then方法的第二个参数。
3.all()
接受一个数组作为自己的参数,数组中每一项都是一个promise对象,当数组的每一个promise状态时resolved时,all方法的状态才会变成resolved,有一个变成rejected,那么all方法的状态就会变成rejected。
4.race()
他和all方法一样,接受一个数组作为自己的参数,但是不同的时他时以第一完成的promise的状态来定义直接的状态,假设第一个状态时resolved,那么race方法的状态就是resolved,反之相反。
5finally()
他是不管promise时什么状态都会执行的都会去执行的,他不接受任何的参数。
Promise的优点:
– 对象的状态不受外界的影响,只有异步的操作结果才能改变他的状态。
– 一旦状态改变就不会在变,任何时候都可以得到这个结果,就如他的名字一样promise(承诺)。
Promise的缺点:
– 无法去取消promise,只要创建就会执行,无法中途去终止。
– 如果不设置回调函数去接受,promise内部会报错,不会映射到外部
– 处在pending(进行中)时 ,外部无法得知进展到那一步
总结:
Promise最早是由社区提出的,在es6才被正式的纳入规范中,是为了解决异步编程的一种方案
他是一个构造函数,接受一个函数作为参数,返回一个Promise实列。他有三个状态:pending(进行中)、resolved(成功)、rejected(失败)。实列的状态只能是pending ->resolved和
pending ->rejected ,状态一旦改变就不会在变换了。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132286.html原文链接:https://javaforall.cn