gpt4 book ai didi

javascript - 如何解耦和封装 Node.js 的长方法?

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:07 24 4
gpt4 key购买 nike

我有以下简化的方法:

var component = require('../../component.js')
exports.bigMethod = function (req, res) {
var connection = new sql.Connection(process.config.sql, function (err) {
new sql.Request(connection)
.input('input', sql.VarChar, 'value')
.execute('dbo.sp1')
.then(function (data) {
if(data[0].length === 0) {
res.status(500).send({ message: 'Some Error' });
}

// set some local variable I'll use later: localVar

new sql.Request(connection)
.input('input1', sql.Int, req.query.input1)
.input('input2', sql.Int, req.query.input2)
.input('input3', sql.DateTime2, req.query.input3)
.input('input4', sql.DateTime2, req.query.input4)
.execute('dbo.sp2')
.then(function (recordset) {
json2csv( { data: recordset[0] }, function(err, data) {
if (err) {
res.status(500).json(err);
}
fs.writeFile(localVar.path, data, function (err) {
if (err) {
res.status(500).json(err);
}
try {
var email = new component.Email();
email.set_callback(function (error) {
if (error) {
res.status(500).send({ message: 'Another error' });
}
res.jsonp([]);
});
email.send(
localVar,
{
filename: localVar.name,
path: localVar.path
}
);
} catch (e) {
res.status(500).send({ message: 'Another Error' });
}
})
});

})
.catch(function (err) {
res.status(500).send({ message: 'Another Error' });
});
})
.catch(function (err) {
res.status(500).send({ message: 'Another Error' });
});

});
};

如您所见,这是一个很长的方法,是一种反模式。此外,对 sp2 的调用实际上是重复的:还有另一个组件进行类似的调用,只是直接返回 json2csv 的结果。

现在,我不太确定如何划分这个方法以充分利用可重用性。我应该将数据库调用封装在返回 Promises 的函数中吗?我应该使用一些柯里化(Currying)吗?

谢谢。

最佳答案

将你的代码划分为不同的函数应该是你的top priority - 仅该功能就处理了太多可以轻松划分的事情。

正如您已经怀疑的那样,您可以通过划分回调和 promise 来使代码功能更加清晰。

回调示例:

new sql.Connection(..., handleSQLConnection);
handleSQLConnection(error) { ... }

promise 示例:

doSomething
.then((a) => doOtherStuff(a))
.then((b) => doSmthElse(b));

doOtherStuff(a) { ... }
doSmthElse(b) { ...}

尽管如此,refactoring很有主见。但你应该尽量避免 God 函数,而应该编写执行 one thing but they do it well 功能的函数。 .

关于javascript - 如何解耦和封装 Node.js 的长方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727101/

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