Promise.try без синей птицы - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь воссоздать функцию обещания.brybird, это по сути то же самое?

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.try bluebird с нативным узлом Promise?

1 Ответ

0 голосов
/ 10 марта 2020

Это должно быть эквивалентно:

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/await, async function s имеют такое поведение неявно. Любые синхронные исключения, выданные в асинхронной функции c, преобразуются в отклонение обещания.

...