Promise.try 没有蓝鸟

Promise.try without bluebird

我正在尝试重新创建 bluebird 的 promise.try 功能,这在本质上是一样的吗?

function promiseTry(callback) {
  let error;
  let value;
  try {
    value = callback();
  } catch (e) {
    error = e;
  }
  return new Promise((resolve, reject) => {
    if (error) {
      reject(error);
      throw error;
    }
    resolve(value);
  });
}

const x = promiseTry(() => {
  throw new Error('hi');
});

如何使用原生节点 Promise 简单地实现 bluebird 的 Promise.try

这应该是等价的:

function promiseTry(callback) {
  return new Promise((resolve, reject) => {
    try {
      resolve(callback())
    } catch(e) {
      reject(e);
    }
  });
}

const x = promiseTry(() => {
  throw new Error('hi');
});

x.then(() => console.log("Promise resolved")).catch(err => console.log("Promise rejected:", err.message));

如果您可以使用 async/awaitasync function 将隐式具有此行为。异步函数中抛出的任何同步异常都将转换为承诺拒绝。