📅  最后修改于: 2023-12-03 15:00:37.448000             🧑  作者: Mango
ES6 Promise是一个盛行于JavaScript编程语言中的抽象的概念,它是一种用于处理异步编程的解决方案,可以更好地处理回调地狱问题,提高代码可读性、可维护性和可扩展性。
Promise的基础操作有三种状态:pending(等待中)、fulfilled(已完成)和rejected(已拒绝)。当一个Promise对象被创建时,它处于pending状态;当Promise对象成功地解决(完成)时,它进入fulfilled状态,并返回一个执行的结果;当Promise对象在解决时发生错误(拒绝)时,它进入rejected状态,并返回一个拒绝的原因。
Promise.resolve()
: 返回一个Promise对象,该对象解决给定的值。Promise.resolve("Hello World").then(result => console.log(result));
// output: Hello World
Promise.reject()
: 返回一个Promise对象,该对象以拒绝(rejected)的状态返回给定的原因。Promise.reject(new Error("Oops!")).catch(error => console.log(error));
// output: Error: Oops!
Promise.all()
: 接收一个Promise对象数组,并在所有Promise对象都解决时返回一个解决数组结果。Promise.all([
new Promise((resolve, reject) => setTimeout(() => resolve("A"), 1000)),
new Promise((resolve, reject) => setTimeout(() => resolve("B"), 500)),
new Promise((resolve, reject) => setTimeout(() => reject(new Error("Oops!")), 2000)),
]).then(results => console.log(results)).catch(error => console.log(error));
// output: Error: Oops!
Promise.race()
: 接收一个Promise对象数组,并在其中任一一个Promise对象解决时返回该结果。Promise.race([
new Promise((resolve, reject) => setTimeout(() => resolve("A"), 1000)),
new Promise((resolve, reject) => setTimeout(() => resolve("B"), 500)),
new Promise((resolve, reject) => setTimeout(() => reject(new Error("Oops!")), 2000)),
]).then(result => console.log(result)).catch(error => console.log(error));
// output: B
以下是一个简短的JavaScript代码块,它创建一个Promise对象,并使用异步函数返回一个解决结果。
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("Hello World"), 1000);
});
promise.then(result => console.log(result));
// output: Hello World
Promise 链是指一系列的Promise对象,并在它们完成时,按特定的先后顺序执行回调函数。Promise 链可以通过使用.then()方法连接Promise对象来简单地构建。
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("A"), 1000);
});
promise.then(result => {
console.log(result);
return new Promise((resolve, reject) => setTimeout(() => resolve("B"), 500));
}).then(result => {
console.log(result);
return new Promise((resolve, reject) => setTimeout(() => reject(new Error("Oops!")), 2000));
}).catch(error => console.log(error));
// output: A
// time delay of 500ms
// output: B
// time delay of 2000ms
// output: Error: Oops!
ES6 Promise是一个非常有用的工具,可以更好地处理回调地狱问题,提高代码可读性、可维护性和可扩展性。它可以帮助程序员构建更好的异步编程体验,所以学习ES6 Promise是非常必要的。