📜  JavaScript Promise 构造函数(1)

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

JavaScript Promise 构造函数

JavaScript Promise 是一种用于异步编程的技术,它可以更加优雅地处理异步代码并解决回调地狱的问题。Promise 构造函数是用于创建 Promise 实例的基本构建块之一,它可以让您创建 Promise 对象并在它们被解决或拒绝时执行相应的操作。

创建 Promise 对象

要创建一个 Promise 对象,您可以使用 Promise 构造函数:

const myPromise = new Promise(function(resolve, reject) {
  // 执行异步操作,然后调用 resolve 或 reject
  // resolve(value) 表示异步操作成功完成和解决。
  // reject(error) 表示异步操作失败和拒绝。
});

在 Promise 构造函数中,您需要传递一个函数作为参数。这个函数带有两个参数:resolve 和 reject。resolve 和 reject 函数是 Promise 构件块中用于解决或拒绝 Promise 对象的函数。

在这个函数中,您可以编写需要执行的异步代码,例如发送 AJAX 请求或读取文件。一旦异步操作完成,您可以调用 resolve 或 reject 函数来解决或拒绝 Promise。

下面是一个例子,它使用 Promise 构造函数来创建一个 Promise 对象并解决它:

const myPromise = new Promise(function(resolve, reject) {
  // 模拟一个异步操作,2 秒钟后解决 Promise。
  setTimeout(function() {
    resolve('Promise 已成功完成');
  }, 2000);
});

myPromise.then(function(value) {
  console.log(value);
  // 输出:'Promise 已成功完成'
});
Promise 链

使用 Promise 构造函数创建的 Promise 对象可以链接起来,以便在操作完成时按顺序执行。您可以在一个 Promise 的成功回调函数中返回新的 Promise,这将使新 Promise 和上一个 Promise 链接在一起,形成链式结构。

下面是一个例子,它使用 Promise 构造函数来创建两个 Promise,并链接它们:

const promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('Promise 1 已成功完成');
  }, 2000);
});

const promise2 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('Promise 2 已成功完成');
  }, 1000);
});

promise1
  .then(function(value) {
    console.log(value);
    // 输出:'Promise 1 已成功完成'
    return promise2;
  })
  .then(function(value) {
    console.log(value);
    // 输出:'Promise 2 已成功完成'
  });

在这个例子中,我们创建了两个 Promise 对象,分别解决后返回它们的成功消息。我们可以在第一个 Promise 的成功回调函数中返回第二个 Promise 对象,这样就可以链接它们。一旦第一个 Promise 完成,第二个 Promise 将开始执行。

Promise 错误处理

在 Promise 构造函数中,您可以使用 reject 函数来拒绝 Promise 和处理错误。在 Promise 链中,如果任何 Promise 被拒绝,它会导致链中的所有 Promise 被跳过,并且跳转到 catch 块。

下面是一个例子,它使用 Promise 构造函数来创建两个 Promise,并处理错误:

const promise1 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    reject(new Error('Promise 1 失败'));
  }, 2000);
});

const promise2 = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('Promise 2 已成功完成');
  }, 1000);
});

promise1
  .then(function(value) {
    console.log(value);
  })
  .then(function() {
    return promise2;
  })
  .then(function(value) {
    console.log(value);
  })
  .catch(function(error) {
    console.log(error.message);
    // 输出:'Promise 1 失败'
  });

在这个例子中,我们创建了两个 Promise 对象。错误处理是通过在 promise1 中使用 reject 函数来触发的。当 reject 被调用时,将触发 catch 块,此时 Promise 链中的所有操作都将停止。在 catch 块中,我们只是输出了错误消息。

总结

JavaScript Promise 构造函数是一种强大的异步编程技术,可以更加优雅地处理异步代码。通过创建 Promise 对象,您可以创建 Promise 链,以便在操作完成时按顺序执行。在 Promise 构造函数和 Promise 链中,您可以使用 resolve 和 reject 函数来解决或拒绝 Promise 并处理错误。