【发布时间】:2018-03-28 16:35:18
【问题描述】:
我正在使用 mysql 开发一个快速应用程序。我的节点版本是 6.11.2。
我的路由器文件是
const router = require("express").Router();
const project = require("../../modules/project/");
// individual project routes
router.get("/", project.getAllProject);
现在我的getAllProject函数代码如下。
/* Get all project */
getAllProject(req, res, next) {
buildQuery(req) /* Build query based on logged in user */
.then(query => runDbQuery(req, query)) /* execute query */
.then(results => formatResult(results)) /* Build response for front end */
.then(output => res.send(output)) /* return results */
.catch(err =>
next(err, req, res, next)
); /* catch error and pass it error middle ware */
}
buildQuery、runDbQuery、fromatResult 返回承诺。
在我的代码审查客户评论如下
在您这里称为“getAllProjects”的方法中 在数据交付之前需要进行 3 次回调检查,总共需要 4 次回调。这太多了。这很慢,因为这些 需要完成回调才能将数据发送到占用服务器处理能力的客户端
他还要求我在一个回调中完成所有操作并将数据返回给客户端。承诺和回调方法会降低性能。他还建议在 express 中使用 RXJS Observable。
【问题讨论】:
-
你必须指定更多细节,比如这些函数的作用@shameersn
-
@Sumeet buildQuery 返回 sql 查询字符串,runDbQuery 执行 buildQuery 返回的 mysql 查询,formatResult 从 mysql 结果创建一个 json。这些函数根据某些条件解析或拒绝,例如,如果有一个 mysql 执行错误,那么它将拒绝错误,否则解析结果。我正在使用 msql 包来执行 mysql 查询
-
@Sumeet 问题是关于单一 vs 多个
.then()方式,而不是他们所做的工作 -
在我看来,代码中包含多少回调或承诺并不是性能的关键因素。如果为了可读性和可维护性而需要拆分功能,那是非常值得的。 Rxjs 并没有解决这样的问题,你仍然会在多个平面图或一个大函数之间做出选择
-
@FanCheung 谢谢
标签: node.js express callback promise rxjs