Promise 是 JavaScript 中处理异步操作的一种方法,它可以让我们更方便地处理异步代码,避免回调地狱。在 Promise 中,有一些静态方法可以帮助我们更好地使用 Promise。
Promise.resolve()
Promise.resolve() 方法返回一个已经解决(resolved)的 Promise 对象,它的参数可以是一个值,也可以是一个 Promise 对象。如果参数是一个 Promise 对象,那么 Promise.resolve() 方法会直接返回这个 Promise 对象,不做任何处理。
示例代码:
// javascriptcn.com 代码示例 Promise.resolve('Hello World').then(function(result) { console.log(result); // 输出:Hello World }); const p = new Promise(function(resolve, reject) { // ... }); Promise.resolve(p) === p; // true
Promise.reject()
Promise.reject() 方法返回一个已经拒绝(rejected)的 Promise 对象,它的参数通常是一个 Error 对象。
示例代码:
Promise.reject(new Error('Something went wrong')).catch(function(error) { console.error(error); // 输出:Error: Something went wrong });
Promise.all()
Promise.all() 方法接受一个 Promise 对象数组作为参数,返回一个新的 Promise 对象。当所有的 Promise 对象都解决时,返回的 Promise 对象才会解决,并且它的解决值是一个数组,包含了所有 Promise 对象的解决值,顺序与传入的 Promise 对象数组的顺序一致。如果任意一个 Promise 对象被拒绝,返回的 Promise 对象也会被拒绝,并且它的拒绝值是第一个被拒绝的 Promise 对象的拒绝值。
示例代码:
// javascriptcn.com 代码示例 const p1 = Promise.resolve(1); const p2 = Promise.resolve(2); const p3 = Promise.resolve(3); Promise.all([p1, p2, p3]).then(function(results) { console.log(results); // 输出:[1, 2, 3] }); const p4 = Promise.resolve(4); const p5 = Promise.reject(new Error('Something went wrong')); const p6 = Promise.resolve(6); Promise.all([p4, p5, p6]).catch(function(error) { console.error(error); // 输出:Error: Something went wrong });
Promise.race()
Promise.race() 方法接受一个 Promise 对象数组作为参数,返回一个新的 Promise 对象。当任意一个 Promise 对象解决或拒绝时,返回的 Promise 对象也会解决或拒绝,并且它的解决值或拒绝值是第一个解决或拒绝的 Promise 对象的解决值或拒绝值。
示例代码:
// javascriptcn.com 代码示例 const p1 = new Promise(function(resolve, reject) { setTimeout(resolve, 1000, 'Hello'); }); const p2 = new Promise(function(resolve, reject) { setTimeout(resolve, 2000, 'World'); }); Promise.race([p1, p2]).then(function(result) { console.log(result); // 输出:Hello });
总结
Promise 中的静态方法可以帮助我们更好地使用 Promise,使我们的代码更加简洁、易读。Promise.resolve() 和 Promise.reject() 可以用来快速创建一个已经解决或拒绝的 Promise 对象,Promise.all() 和 Promise.race() 可以用来处理多个 Promise 对象的状态。在使用 Promise 时,我们应该尽可能地利用这些静态方法,让我们的代码更加优雅。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658212acd2f5e1655dd42b22