J. *_*ers 3 if-statement node.js express
我很好奇您是否可以if在 Express 应用程序中编写语句以在不提供else语句的情况下有条件地执行您的代码。
if(pred) {
doSomething()
}
return foo;
calcBar(); // doesn't run.
Run Code Online (Sandbox Code Playgroud)
以上是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})
}
}
Run Code Online (Sandbox Code Playgroud)
我知道因为这个问题,第一个之后的代码res.json可能仍然会被执行。有没有办法阻止它?如果满足第一个 if 条件,我不希望执行第二个 GraphQL 调用。这可能不使用else吗?
编辑:
正如我上面提到的问题,使用return语句是一个糟糕的选择,因为:
它还使它变得不那么有意义和模糊,因为它使用了不正确的语义。如果您没有使用函数中的值,则不应返回一个值。
您可以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})
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
作为替代方案,您可以拆分数据逻辑并建立响应。这样你就可以使用 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 };
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2480 次 |
| 最近记录: |