首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在异步函数中使用try-catch块捕获错误

无法在异步函数中使用try-catch块捕获错误
EN

Stack Overflow用户
提问于 2022-07-14 23:58:56
回答 2查看 238关注 0票数 0

我正在尝试将一个try-catch块合并到一个异步函数中。但是,我似乎无法用下面编写的代码捕捉到状态代码400的错误。

代码语言:javascript
复制
const run = async () => {
  const response = await client.lists.addListMember(listId, {
    email_address: email,
    status: "subscribed",
    merge_fields: {
      firstName: firstName,
      lastName: lastName
    }
  });
  try {
    res.sendFile(__dirname + "/success.html");
  } catch (err) {
    res.sendFile(__dirname + "/failure.html");
  }
};
run();

我发现修改"run“函数而不是将try-catch块合并到异步函数中,并按照下面的工作方式移除try-catch块,但是为什么呢?这两种密码有什么区别?

代码语言:javascript
复制
app.post("/", function(req, res) {
  const firstName = req.body.fname;
  const lastName = req.body.lname;
  const email = req.body.email;
  client.setConfig({
    apiKey: "*****-us10",
    server: "us10",
  });
  const listId = "****";
  const run = async () => {
    const response = await client.lists.addListMember(listId, {
      email_address: email,
      status: "subscribed",
      merge_fields: {
        firstName: firstName,
        lastName: lastName
      }
    });

    res.sendFile(__dirname + "/success.html");
  };

  run().catch(e =>   res.sendFile(__dirname + "/failure.html"));

我正在跟踪Mailchimp文档。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-15 00:35:44

问题是,为了catchawait client.lists.addListMember(...)返回的可能的拒绝代码需要在try块中,因为catch只处理关联的try块中的错误。

代码语言:javascript
复制
try {
   code that could throw an erro
} catch(err) {
   handle error thrown in the try
}

所以,它就像移动try {以包含await ....代码一样简单

代码语言:javascript
复制
const run = async () => {
  try {
    const response = await client.lists.addListMember(listId, {
      email_address: email,
      status: "subscribed",
      merge_fields: {
        firstName: firstName,
        lastName: lastName
      }
    });
    res.sendFile(__dirname + "/success.html");
  } catch (err) {
    res.sendFile(__dirname + "/failure.html");
  }
};
run();
票数 2
EN

Stack Overflow用户

发布于 2022-07-15 00:05:20

你把try {} catch {}放在了错误的位置,它不应该只是放在"res.sendFile();“下面,它应该放在await client.lists.addListMemberres.sendFile下面

代码语言:javascript
复制
const run = async () => {
  try {
    const response = await client.lists.addListMember(listId, {
      email_address: email,
      status: "subscribed",
      merge_fields: {
        firstName: firstName,
        lastName: lastName
      }
    });
    await res.sendFile(__dirname + "/success.html");
  } catch (err) {
    await res.sendFile(__dirname + "/failure.html");
  }
};
run();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72987777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档