用 ES6 解决你的回调地狱
最近系统的学了一下 ES6,发现以往编码的项目还有很多可以改进的空间,所以我使用 ES6 对部分过去的项目进行重构
Promise
这是之前用 node.js 写的一个接口,查询作者信息和当前用户的关系,基本思路是
- 查询粉丝和博主的关系(关注,未关注)
- 查询博主的所有粉丝
里面有一个 connection 查询是很明显的回调地狱,让我们用 Promise 解决掉它
app.get("/authorInfo", function (req, res) {
const fanId = req.query.fan_id;
const authorId = req.query.blogger_id;
const r = obEmpty();
connection.query(
"select * from fans where blogger_id = ? and fan_id = ?;",
[authorId, fanId],
function (error, result) {
if (error) throw error;
// 结果基类一定要初始化置空
r.code = 200;
r.msg = "success";
r.data = {
};
r.data.relate = result.length ? true : false;
connection.query(
"select count(*) as total from fans where blogger_id = ?;",
[authorId],
function (error, result) {
if (error) throw error;
r.data.fanTotal = result[0].total;
res.send(r);
}
);
}
);
});
使用 Promise 解决后
app.get("/authorInfo", function (req, res) {
const fanId = req.query.fan_id;
const authorId = req.query.blogger_id;
const promise = new Promise((resolve, reject) => {
connection.query(
"select * from fans where blogger_id = ? and fan_id = ?;",
[authorId, fanId],
function (error, result) {
if (error) reject(error);
resolve(result.length ? true : false);
}
);
});
promise
.then((value) => {
connection.query(
"select count(*) as total from fans where blogger_id = ?;",
[authorId],
function (error, result) {
if (error) throw error;
res.send(
new Result(200, "success", {
relate: value,
fanTotal: result[0].total,
})
);
}
);
})
.catch