ES6学习总结之Promise

xiaoxiao2021-02-28  25

一个 Promise 对象可以理解为一次将要执行的操作(常常被用于异步操作),使用了 Promise 对象之后可以用一种链式调用的方式来组织代码,让代码更加直观。而且由于  Promise.all  这样的方法存在,可以让同时执行多个操作变得简单。接下来就来简单介绍 Promise 对象。 在 Promise 对象当中有两个重要方法———— resolve   和  reject resolve   方法可以使 Promise 对象的状态改变成成功,同时传递一个参数用于后续成功后的操作,在这个例子当中就是  Hello World!  字符串。 reject  方法则是将 Promise 对象的状态改变为失败,同时将错误的信息传递到后续错误处理的操作。 一.Promise 的三种状态 上面提到了  resolve     reject   可以改变 Promise 对象的状态,那么它究竟有哪些状态呢? Promise 对象有三种状态: Fulfilled 可以理解为成功的状态Rejected 可以理解为失败的状态Pending 既不是 Fulfilld 也不是 Rejected 的状态,可以理解为 Promise 对象实例创建时候的初始状态 helloWorld 的例子中的   then   方法就是根据 Promise 对象的状态来确定执行的操作,resolve 时执行第一个函数(onFulfilled),reject 时执行第二个函数(onRejected)。 注意:实例化的Promise对象会立即执行 二.Promise.prototype.then() VS Promise.prototype.catch() .then()方法是Promise原型链上的方法,它包含两个参数方法,分别是已成功resolved的回调和已失败rejected的回调。 promise.then( () => { console.log('this is success callback') }, () => { console.log('this is fail callback') }) .catch()的作用是捕获Promise的错误,与then()的rejected回调作用几乎一致。但是由于Promise的抛错具有冒泡性质,能够不断传递,这样就能够在下一个catch()中统一处理这些错误。同时catch()也能够捕获then()中抛出的错误,所以建议不要使用then()的rejected回调,而是统一使用catch()来处理错误 promise.then( () => { console.log('this is success callback') }).catch( (err) => { console.log(err) }) 同样,catch()中也可以抛出错误,由于抛出的错误会在下一个catch中被捕获处理,因此可以再添加catch() 使用rejects()方法改变状态和抛出错误 throw new Error() 的作用是相同的 当状态已经改变为resolved后,即使抛出错误,也不会触发then()的错误回调或者catch()方法 then() 和 catch() 都会返回一个新的Promise对象,可以链式调用 promise.then( () => { console.log('this is success callback') }).catch( (err) => { console.log(err) }).then( ...).catch( ...) 三.其他方法 Promise.all(p1,p2,p3) 相当于将promise对象打包,打包完还是一个promise对象,必须确保所有的promise对象都是resolve状态,都是成功状态才返回 4.Promise.race(p1,p2,p3) 只要有一个promise对象是resolve状态,就返回

(前端小白,如有错误,欢迎指正~~)

转载请注明原文地址: https://www.6miu.com/read-2624664.html

最新回复(0)