我正在尝试将一个try-catch块合并到一个异步函数中。但是,我似乎无法用下面编写的代码捕捉到状态代码400的错误。
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块,但是为什么呢?这两种密码有什么区别?
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文档。
发布于 2022-07-15 00:35:44
问题是,为了catch,await client.lists.addListMember(...)返回的可能的拒绝代码需要在try块中,因为catch只处理关联的try块中的错误。
即
try {
code that could throw an erro
} catch(err) {
handle error thrown in the try
}所以,它就像移动try {以包含await ....代码一样简单
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();发布于 2022-07-15 00:05:20
你把try {} catch {}放在了错误的位置,它不应该只是放在"res.sendFile();“下面,它应该放在await client.lists.addListMember和res.sendFile下面
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();https://stackoverflow.com/questions/72987777
复制相似问题