📜  ES6-承诺(1)

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

ES6-承诺

ES6-承诺(Promise)是一种异步编程的解决方案,它可以让我们更优雅、更简洁地处理异步操作,避免了回调地狱。

基本用法

创建一个 Promise:

const promise = new Promise((resolve, reject) => {
  // 异步操作
  if (异步操作成功) {
    resolve(操作结果);
  } else {
    reject(错误信息);
  }
});

Promise 接受一个函数作为参数,函数内部进行异步操作,在操作成功时调用 resolve 方法并传入操作结果,操作失败时调用 reject 方法并传入错误信息。

使用 Promise:

promise
  .then(操作成功的回调函数)
  .catch(操作失败的回调函数)
  .finally(操作结束的回调函数);

then 方法用来注册操作成功时的回调函数,catch 方法用来注册操作失败时的回调函数,finally 方法用来注册无论操作成功与否都会执行的回调函数。

Promise 与回调地狱

异步操作依赖于回调函数来实现,而在传统的回调函数中,如果存在多个异步操作,就会形成回调嵌套的地狱般的代码结构,称为 “回调地狱”。

使用 Promise 可以避免回调地狱的情况,让异步代码更简洁、易读。

Promise.all

当需要同时执行多个异步操作时,可以使用 Promise.all 方法。

const promises = [promise1, promise2, promise3, ...];

Promise.all(promises)
  .then(操作成功的回调函数)
  .catch(操作失败的回调函数);

Promise.all 接受一个由多个 Promise 对象组成的数组作为参数,返回的 Promise 对象在所有 Promise 对象都执行成功时才会触发成功回调函数,只要有一个 Promise 对象执行失败,就会触发失败回调函数。

Promise.race

当需要同时执行多个异步操作时,如果只需要获取最先执行成功的异步操作的结果,可以使用 Promise.race 方法。

const promises = [promise1, promise2, promise3, ...];

Promise.race(promises)
  .then(操作成功的回调函数)
  .catch(操作失败的回调函数);

Promise.race 接受一个由多个 Promise 对象组成的数组作为参数,返回的 Promise 对象在其中任意一个 Promise 对象执行成功时就会触发成功回调函数。

异常处理

使用 Promise 时,异步操作成功和失败的信息可以通过 resolvereject 方法传递出来,但是如果异步操作抛出了异常,需要通过 try...catch... 语句来捕获异常。

new Promise((resolve, reject) => {
  try {
    // 异步操作
    if (异步操作成功) {
      resolve(操作结果);
    } else {
      reject(错误信息);
    }
  } catch (error) {
    reject(error);
  }
});
小结

ES6-承诺是一种异步编程的解决方案,可以让我们更优雅、更简洁地处理异步操作,避免了回调地狱。使用 Promise 可以创建、调用、组合多个异步操作,避免了传统回调函数中的嵌套,让代码更易读、易维护。

以上就是 ES6-承诺的基本用法,如果想了解更多的知识点,建议参考官方文档或相关书籍。