ES6 中的 Promise 对象的 rejected 状态使用方法
概述
JavaScript 异步编程经常会使用 Promise 对象,通过 Promise 对象我们可以封装异步的操作,使得代码看起来更加简洁明了,同时也更加易于维护。 Promise 对象中有三种状态:
pending
: 初始状态fulfilled
: 操作成功rejected
: 操作失败
Promise 对象状态变化只有两种可能:从 pending
变成 fulfilled
或者从 pending
变成 rejected
。 本文主要介绍在 Promise 对象 rejected 状态时的使用方法。
Promise.reject()
Promise.reject(reason) 方法返回一个被拒绝的 Promise 对象,其中 reason 参数为拒绝原因。
示例代码:
Promise.reject("rejected").catch(function(reason){ console.log(reason); // 'rejected' });
.catch()
方法用于捕获被拒绝的 Promise
对象,.catch()
的参数为失败回调函数, 该函数接收拒绝原因作为参数。
Promise.then()
Promise.then(onFulfilled, onRejected) 方法用于指定 Promise
对象的状态改变后要执行的操作。其中 onFulfilled
是状态变为 fulfilled
时执行的回调函数,onRejected
是状态变为 rejected
时执行的回调函数。在使用 Promise
对象时建议定义 onRejected
函数, 以处理异步操作中返回的错误结果。
示例代码:
// javascriptcn.com 代码示例 Promise.reject("rejected").then( // onFulfilled function(value){ console.log(value); }, // onRejected function(reason){ console.log(reason); // 'rejected' return "handled"; } ).then( // onFulfilled function(value){ console.log(value); // 'handled' }, // onRejected function(reason){ console.log("should not show"); } );
在 Promise.reject()
方法中返回一个被拒绝的 Promise
对象, 同样可以使用 .then()
方法。 当然,这里的 onFulfilled
回调函数将不会被执行,但是 onRejected
回调函数会被执行。
Promise.catch()
Promise.catch() 方法和 Promise.then() 方法的作用是一样的。其实,Promise.catch() 是 Promise.then(null, rejection) 的别名,用于指定状态改变时的错误处理函数。
示例代码:
Promise.reject("rejected").catch(function(reason){ console.log(reason); // 'rejected' });
Promise.all()
Promise.all() 方法用于将多个 Promise 对象进行合并,并返回一个新的 Promise 对象。
Promise.all() 方法接收的参数为一个 Promise 对象的数组,当数组中的所有 Promise 对象都转换为 fulfilled 状态时,返回的 Promise 对象的状态才会变为 fulfilled;当数组中的任何 Promise 对象转换为 rejected 状态时,返回的 Promise 对象的状态就会变成 rejected。
示例代码:
Promise.all([promise1, promise2, promise3]).then(function(result){ console.log(result); }).catch(function(reason){ console.log(reason); });
Promise.all() 方法的返回值由所有 Promise 对象的返回值组成的数组。 在异步操作时, 使用 Promise.all() 方法可以很方便的将多个异步操作结果进行汇总处理。
总结
使用 Promise 对象可以很好的解决异步编程过程中的问题。 在使用 Promise 对象时,对于 rejected 状态的处理一定要合理,否则会使程序无法正常运行。除了上面介绍的方法之外,Promise 对象还有一些其他的实用操作可以用于处理状态变化。 对于 Promise 对象的使用应该在实际开发过程中进行深入的学习,遇到问题时及时查阅相关资料或者寻求帮助,这样可以很好的提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652e26067d4982a6ebf33713