📜  一一运行promise - Javascript(1)

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

一一运行 Promise - Javascript

在 Javascript 中,Promise 是用于处理异步操作的一种机制,可以让我们更加方便地管理异步任务的状态、流程和结果。Promise 本身是一个对象,有三种状态:Pending(进行中)、Fulfilled(已成功)和Rejected(已失败)。通过 Promise 的 then 方法,我们可以在 Promise 对象状态发生变化时指定一些回调函数来处理异步操作的结果。

创建 Promise

要创建一个 Promise,我们可以使用 Promise 的构造函数,并传入一个函数作为参数,该函数接受两个参数:resolve 和 reject,分别代表 Promise 对象的状态变化为 Fulfilled 和 Rejected 时所执行的函数。下面是创建 Promise 的示例代码:

const promise = new Promise((resolve, reject) => {
  // 异步操作代码
  setTimeout(() => {
    const result = Math.random() > 0.5
    if (result) {
      resolve('Promise 已成功执行')
    } else {
      reject('Promise 执行失败')
    }
  }, 1000)
})

以上代码中,我们使用了 setTimeout 模拟了一个异步操作,当随机产生的结果大于 0.5 时,Promise 的状态会变为 Fulfilled,返回"Promise 已成功执行";否则状态会变为 Rejected,返回"Promise 执行失败"。

Promise 的 then 方法

Promise 的 then 方法用于指定 Promise 对象的状态发生变化时所执行的函数,并返回一个新的 Promise 对象。then 方法有两个参数,第一个参数代表状态发生变化为 Fulfilled 时所执行的函数,第二个参数代表状态发生变化为 Rejected 时所执行的函数。下面是使用 then 方法的示例代码:

promise
  .then((result) => {
    console.log(result) // 输出"Promise 已成功执行"
  })
  .catch((error) => {
    console.error(error) // 输出"Promise 执行失败"
  })

以上代码中,我们使用 then 方法来处理异步操作的结果,当异步操作成功时,打印结果;当异步操作失败时,打印错误信息。

串行执行 Promise

在实际开发中,我们有时需要按照一定的顺序来执行多个异步操作,这时我们可以使用 Promise 的 then 方法来串行执行多个 Promise。下面是使用 then 方法来实现串行执行多个 Promise 的示例代码:

const promise1 = new Promise((resolve, reject) => {
  // 异步操作代码
  setTimeout(() => {
    resolve('Promise1 已成功执行')
  }, 1000)
})

const promise2 = new Promise((resolve, reject) => {
  // 异步操作代码
  setTimeout(() => {
    resolve('Promise2 已成功执行')
  }, 2000)
})

promise1
  .then((result) => {
    console.log(result) // 输出"Promise1 已成功执行"
    return promise2
  })
  .then((result) => {
    console.log(result) // 输出"Promise2 已成功执行"
  })
  .catch((error) => {
    console.error(error) // 输出异常信息
  })

以上代码中,我们按照顺序创建了两个 Promise,使用 then 方法来指定它们的执行顺序,第一个 Promise 执行成功后,返回第二个 Promise 对象并继续执行,直到最后一个 Promise 执行结束。

并行执行 Promise

除了串行执行多个 Promise,我们有时也需要同时执行多个异步操作,这时我们可以使用 Promise 的 all 方法来实现同时执行多个 Promise。all 方法接收一个 Promise 数组作为参数,当所有 Promise 都执行成功后,all 方法返回的 Promise 的状态变为 Fulfilled,并返回一个结果数组;当任何一个 Promise 执行失败时,all 方法返回的 Promise 的状态变为 Rejected,并返回失败的 Promise 结果。下面是使用 all 方法来实现同时执行多个 Promise 的示例代码:

const promise1 = new Promise((resolve, reject) => {
  // 异步操作代码
  setTimeout(() => {
    resolve('Promise1 已成功执行')
  }, 1000)
})

const promise2 = new Promise((resolve, reject) => {
  // 异步操作代码
  setTimeout(() => {
    resolve('Promise2 已成功执行')
  }, 2000)
})

const promise3 = new Promise((resolve, reject) => {
  // 异步操作代码
  setTimeout(() => {
    resolve('Promise3 已成功执行')
  }, 3000)
})

Promise.all([promise1, promise2, promise3])
  .then((result) => {
    console.log(result) // 输出结果数组
  })
  .catch((error) => {
    console.error(error) // 输出异常信息
  })

以上代码中,我们创建了三个 Promise,使用 Promise 的 all 方法来同时执行这三个 Promise,当所有 Promise 执行成功后,打印结果数组;当任何一个 Promise 执行失败时,打印错误信息。

总结

通过本文的介绍,我们了解了如何创建、使用 Promise 来处理异步操作,并掌握了串行执行、并行执行多个 Promise 的方法。Promise 是一个非常强大且常用的异步编程工具,可以让我们更加方便地管理异步任务的状态、流程和结果,极大的提高了代码的可读性和可维护性。