📜  将任何函数变成承诺 - Javascript (1)

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

将任何函数变成承诺 - Javascript

在 Javascript 中,我们经常会遇到需要处理异步调用的情况。为了处理这种情况,我们可以使用 Promise 对象来处理异步调用的结果。本文将介绍如何将任何函数变成一个返回 Promise 对象的承诺。

Promise 对象简介

Promise 是 Javascript 中的一个对象,它表示一个异步操作的最终状态。Promise 对象有三种状态:进行中(pending)、已完成(fulfilled)和已拒绝(rejected)。当一个 Promise 对象处于进行中状态时,它可以转换为已完成或已拒绝状态。

Promise 对象有两个重要的方法:then 和 catch。then 方法用于处理 Promise 对象的成功状态,catch 方法用于处理 Promise 对象的失败状态。使用 then 和 catch 方法可以将 Promise 对象串联起来,形成一个 Promise 链。

将普通函数变成承诺

我们可以使用一个简单的函数将普通函数转换为返回 Promise 对象的承诺:

function promise(fn) {
  return function() {
    const args = arguments;
    return new Promise(function(resolve, reject) {
      try {
        resolve(fn.apply(this, args))
      } catch (error) {
        reject(error);
      }
    });
  }
}

这个函数接受一个普通函数作为参数,并返回一个新的函数,这个新的函数返回一个 Promise 对象,它处理了普通函数的执行结果,并将结果传递给 resolve 方法(如果普通函数执行成功),或者传递给 reject 方法(如果普通函数执行失败)。

我们可以使用这个函数将任何普通函数转换为返回 Promise 对象的承诺。例如,假设我们有一个普通函数 add:

function add(a, b) {
  return a + b;
}

我们可以将它转换为一个返回 Promise 对象的承诺,通过以下方式:

const promisedAdd = promise(add);
promisedAdd(2, 3)
  .then(function(result) {
    console.log(result); // 5
  })
  .catch(function(error) {
    console.log(error);
  });
结论

Javascript 中的 Promise 对象可以帮助我们处理异步调用的结果。我们可以将任何普通函数转换为返回 Promise 对象的承诺,以便更好地处理异步调用。