promise方法总结

优点:1、对象的状态不受外界的影响,只有异步操作的结果可以决定是那种状态;2、状态一旦改变,就不会再次改变。任何时候都可以得到这个结果。在这里跟(event)事件不同,如果错过了这个事件结果再去监听,是监听不到event事件的。

缺点:1、promise一旦执行无法取消。2、如果不设置回调函数promise内部抛出的错误,不会反映到外部。3、当处于pending(进行中)的状态时,无法得知进行到那一阶段(刚开始或者即将完成)。

基本用法:es6规定,promise对象是一个构造函数,用来生成promise实例。promise构造函数接受一个函数作为参数,该函数有两个参数分别是resolve和reject;resolve表示成功的回调,reject表示失败的回调;

then方法:then方法返回的是一个新的promise实例。注意:如果采用链式的then,可以指定一组按照次序调用的回调函数,如果前一个回调函数返回的是promise,后一个函数会等前一个状态发生改变才会调用。

catch方法:catch方法是在promise发生错误时的回调。注意:如果promise状态已经变成resolved,在抛出错误时无效的。promise错误具有‘冒泡’性质,会一直往上传递,直到被捕获。

finally方法:finally方法指定无伦最后promise最后状态如何都会执行的函数。注意:finally不接受任何参数,这就意味着无法直到前面的promise状态。

all方法:all方法用于将多个实例包装成一个新的promise实例。注意:只有当所有的实例都变成fulfilled时,包装的实例状态,才会变成fulfilled,此时他们的返回值会传递给新的回调函数,只要其中有一个被rejected,包装的实例状态就会变成rejected,此时第一个被rejected的实例返回值会传递给新的回调。

race方法:race方法同样是将多个实例包装成一个新的实例。跟上面的all方法类似。

allSettled方法:allSettled方法接收一组promise实例作为参数,包装成一个新的实例。注意:只有等所有的实例都返回结果,才会结束。返回的结果不论成功失败,状态总是fulfilled,不会是失败。

any方法:接收一组promise实例作为参数,只要有一个变为fulfilled状态,包装的实例就会变成fulfilled状态,如果所有的参数都变成rejected状态,就会变成rejected状态。

reject方法:reject方法会返回一个新的实例,状态为rejected。回调函数立即执行。

try方法:在实际开发中遇到无法区分函数是同步还是异步操作时,但是还想用promise来处理,可以使用try方法。

resolve方法:将现有对象转为promise对象,它的参数分为四种情况:

1、参数是一个promise实例;如果参数是promise实例,则不作修改,原样返回。

2、参数是一个thenable对象,是指由then方法的对象;该方法会将这个对象转为promise对象,然后立即执行then方法。

3、如果不是具有then方法的对象或者根本不是对象;如果参数是一个原始值,或者是一个不具有then方法的对象,则promise。resolve方法返回一个新的promise对象,状态为resolved

4、不带有任何参数;如果不带有任何参数会直接返回一个resolved状态的promise对象。

posted @ 2019-11-06 11:29  咱也不敢问  阅读(2488)  评论(0编辑  收藏  举报