await-to-js

/**
 * @param { Promise } promise
 * @param { Object= } errorExt - Additional Information you can pass to the err object
 * @return { Promise }
 */
export function to<T, U = Error>(
  promise: Promise<T>,
  errorExt?: object
): Promise<[U, undefined] | [null, T]> {
  return (
    promise.then <
    [null, T] >
    ((data: T) => [null, data]).catch <
    [U, undefined] >
    ((err: U) => {
      if (errorExt) {
        const parsedError = Object.assign({}, err, errorExt);
        return [parsedError, undefined];
      }

      return [err, undefined];
    })
  );
}

export default to;

function to(promise,errorExt={}){
  return (   promise.then 
    ((data) => [null, data]).catch
    ((err) => {
      if (errorExt) {
        const parsedError = Object.assign({}, err, errorExt);
        return [parsedError, undefined];
      }

      return [err, undefined];
    }))
}


async function foo() {
  const [error, result] = await to(Promise.resolve(1));
  console.log(result); // 1
  console.log(error); // null

  const [error1, result1] = await to(Promise.reject("error错误了"));
  console.log(result1); // undefined
  console.log(error1); // error错误了

  console.log("代码还能正常执行");
}

foo();
posted @ 2023-05-25 15:12  7c89  阅读(56)  评论(0)    收藏  举报