使用await异步获取数据而无需尝试捕获

Lye*_*UKH 2 javascript try-catch async-await typescript

我正在尝试使用await-async而没有try-catch:

const getUsers = async (reject, time) => (
  new Promise((resolve, reject) => {
    setTimeout(() => {
      if (reject) {
        reject(....)
      }
      resolve(.....);
    }, time);
  })
);

module.exports = {
  getUsers ,
};
Run Code Online (Sandbox Code Playgroud)

使用try-catch块,它看起来像这样:

const { getUsers } = require('./users');

const users = async () => {
  try {
    const value = await getUsers(1000, false);
    .....
  } catch (error) {
    .....
  }
}

users();
Run Code Online (Sandbox Code Playgroud)

如何在不使用try-catch块的情况下编写相同的代码?

Lye*_*UKH 6

使用promise函数then-catch使过程更简单,我使用以下utils:

// utils.js

const utils = promise => (
  promise
    .then(data => ({ data, error: null }))
    .catch(error => ({ error, data: null }))
);

module.exports = utils;
Run Code Online (Sandbox Code Playgroud)

然后

const { getUsers } = require('./api');
const utils = require('./utils');

const users = async () => {
  const { error, data } = await utils(getUsers(2000, false));
  if (!error) {
    console.info(data);
    return;
  }
  console.error(error);
}

users();
Run Code Online (Sandbox Code Playgroud)

在不使用try-catch块的情况下,我得到了相同的输出,这样可以更好地理解代码。