gpt4 book ai didi

node.js - 有条件地在 Express 应用程序中发送响应

转载 作者:太空宇宙 更新时间:2023-11-03 22:44:56 26 4
gpt4 key购买 nike

我很好奇您是否可以在 Express 应用中编写 if 语句来有条件地执行代码,而无需提供 else 语句。

if(pred) {
doSomething()
}
return foo;
calcBar(); // doesn't run.

上面是在return语句之后停止执行的同步代码。

我的 Express 函数如下所示:

app.get('/matches', async function(req, res) {
try {
const data = await someGraphQLCall();
if(data.length === 0) {
res.json({ message: "No data." });
}
const someOtherData = await someOtherGraphQLCall(data.foo);
res.json({ someOtherData });
} catch (err) {
res.json({err})
}
}

我知道是因为this question第一个 res.json 之后的代码可能仍会执行。有办法阻止吗?如果满足第一个 if 条件,我不希望执行第二个 GraphQL 调用。不使用 else 是否可以实现?

编辑:

正如我上面提到的链接的问题,使用 return 语句是一个糟糕的选择,因为:

it also makes it less meaningful and vague, cause it uses incorrect semantics. If you are not using the value from the function, then you shouldn't return one.

最佳答案

您可以在第一个响应上使用 return 关键字立即从函数返回。

app.get('/matches', async function(req, res) {
try {
const data = await someGraphQLCall();
if(data.length === 0) {
return res.json({ message: "No data." });
}
const someOtherData = await someOtherGraphQLCall(data.foo);
res.json({ someOtherData });
} catch (err) {
res.json({err})
}
}

编辑:

作为替代方案,您可以拆分数据逻辑并构建响应。这样就可以使用 return 并且更容易阅读:

app.get('/matches', async function (req, res) {
try {
const data = await getDataFromGraphQLCall();
res.json(data);
} catch (err) {
res.json({ err })
}
});

async function getDataFromGraphQLCall() {
const data = await someGraphQLCall();
if (data.length === 0) {
return { message: "No data." };
}
const someOtherData = await someOtherGraphQLCall(data.foo);
return { someOtherData };
}

关于node.js - 有条件地在 Express 应用程序中发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56790238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com