为什么我收到请求时会出现未处理的承诺错误

时间:2019-04-08 16:06:31

标签: javascript node.js async-await

我正在使用网络抓取应用程序。 我试图在 NodeJS 中发出get请求以获取路由,我在app.get Route中编写了一些异步代码,但得到了unhandledPromiseRejection error。 我在 app.get 中声明了回调函数,以便可以异步获取响应。

我使用了异步等待语法,如下所示,这可能是错误的。任何帮助表示赞赏!

app.get('/', async (req,res) => {
  let USERNAME = req.query.search_name;

  const BASE_URL = `https://instagram.com/${USERNAME}`;

  let response = await request(BASE_URL);

});

请求未成功显示unhandledPromiseRejection错误

2 个答案:

答案 0 :(得分:1)

通过async/await,您可以像这样使用try/catch

通常,async/await的错误处理是通过try/catch完成的,例如:

async function someFunc() {
  try {
    // get resolved value
    const result = await getSomethingFromPromise();
  } catch (e) {
    // handle error rejected from a promise
    console.error(e)
  }
}

TJ Crowder 所述(以及强调(:)),最好将尝试捕获包裹在整个身体上,也可以在同一块中使用多次等待。

app.get('/', async (req,res) => {
  try {
    let USERNAME = req.query.search_name;
    // multiple await
    // const result = await someOtherPromise();
    const BASE_URL = `https://instagram.com/${USERNAME}`;
    let response = await request(BASE_URL);
  } catch (e) {
    console.error(e);
  }
});

答案 1 :(得分:-1)

因为您没有捕获错误。

app.get('/', async (req,res) => {
  let USERNAME = req.query.search_name;

  const BASE_URL = `https://instagram.com/${USERNAME}`;
  try {
    let response = await request(BASE_URL);
  } catch (e) {
    console.error(e);
  }
});

确保在try catch块中获得了异步/等待。

了解更多: https://alligator.io/js/async-functions/

https://hackernoon.com/understanding-async-await-in-javascript-1d81bb079b2c