gpt4 book ai didi

javascript - nodejs 金字塔 of doom 解决方案

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:35 29 4
gpt4 key购买 nike

我一直在寻找解决厄运金字塔的办法。到目前为止,我得出的结论如下:

router.use('/create',
function(res,req,next)
{
try
{
var data =
{
startDate: new Date(req.body.startDate),
endDate: new Date(req.body.endDate),
details: req.body.details,
file:req.body.file,
filename:req.body.filename,
fileType:req.body.fileType
};
res.data = data;
next()
}catch(e)
{
res.end(JSON.stringify({complete:"false",error:e}));
return;
}
},
function(res,req,next){...},
function(res,req,next)
{
if(res.status.file)
{
var sql = "";
sql = 'insert into attachments values(' + id + ',"' + data.file + '","' + data.filename + '","' + data.fileType + '");';

db.exec(sql, function(err)
{
if(err)
{
res.end(JSON.stringify({
complete: "false",
error: err + " Contact 1-915-400-0823 NOW this left dirty data in the database"
}));
return;
}
res.delegateID = this.lastID;
next()
});
}
else
{
next()
}
},
function(res,req,next){...},
function(res,req,next){...},
);

每个函数都完成一项更新数据库、发送电子邮件和验证的任务。我在每次回调后使用 next() 来调用流中的下一个函数;跳过任何不需要的任务。这是一个很好的解决方案还是我应该使用其他东西?

最佳答案

总结

根据您发布的代码,您应该使用生成器函数

关于

生成器函数返回一个可迭代对象。然后使用 .next() 函数推进生成器,生成器将在函数完成或 yield 语句时暂停。

在您的情况下,代码将被重构为单个 function*yield 语句,您需要它来等待数据。然后,您可以在收到该数据后调用 .next() 并前进到函数的下一部分。

我还建议您看一下Promises。然后你可以运行生成器直到 yield 语句并从中返回一个 promise 。只有在返回的 promise 已解决后才前进到下一个 yield 语句。

关于javascript - nodejs 金字塔 of doom 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42911076/

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