📜  ES6承诺(1)

📅  最后修改于: 2023-12-03 15:00:37.448000             🧑  作者: Mango

ES6 Promise

ES6 Promise是一个盛行于JavaScript编程语言中的抽象的概念,它是一种用于处理异步编程的解决方案,可以更好地处理回调地狱问题,提高代码可读性、可维护性和可扩展性。

Promise 基础操作 {#promise-基础操作}

Promise的基础操作有三种状态:pending(等待中)、fulfilled(已完成)和rejected(已拒绝)。当一个Promise对象被创建时,它处于pending状态;当Promise对象成功地解决(完成)时,它进入fulfilled状态,并返回一个执行的结果;当Promise对象在解决时发生错误(拒绝)时,它进入rejected状态,并返回一个拒绝的原因。

Promise 常用方法 {#promise-常用方法}
  1. Promise.resolve(): 返回一个Promise对象,该对象解决给定的值。
Promise.resolve("Hello World").then(result => console.log(result));
// output: Hello World
  1. Promise.reject(): 返回一个Promise对象,该对象以拒绝(rejected)的状态返回给定的原因。
Promise.reject(new Error("Oops!")).catch(error => console.log(error));
// output: Error: Oops!
  1. 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!
  1. 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
Promise 实例 {#promise-实例}

以下是一个简短的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 链是指一系列的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是非常必要的。