node.js - 如何解决这些承诺链?
问题描述
我正在尝试为我的节点应用程序编写 2 条路由。1 条路线用于返回单个项目,1 条路线用于数组列表。
路线是这样的。
router
.route("/:income_id")
.get((req, res) => {
Income.findById(req.params.income_id)
.populate("services.service_id")
.then((income) => {
return filterIncomeFunc(income);
})
.then((result) => {
return res.status(200).json(result);
})
.catch(function (error) {
res.status(404).json({ msg: "Income not Found" });
});
});
router
.route("/")
.get((req, res) => {
Income.find({})
.populate("services.service_id")
.then((income) => {
//problem here
return filterArrayIncome(income);
})
.then((result) => {
console.log('======================');
console.log(result);
console.log('======================');
return res.status(200).json(result);
})
.catch(function (error) {
res.status(404).json({ msg: "Income not Found" });
});
});
因为我需要过滤其中的 2 个,所以我编写了 2 个名为filterArrayIncome
&filterIncomeFunc
我的代码适用于单个项目,但数组函数不起作用,
这是我的过滤代码
const filterIncomeFunc = (income) => {
return new Promise((resolve, reject) => {
let filteredIncome = {};
filteredIncome.services = income.services.map((service) => {
return {
service_name: service.service_id.service_name,
price: service.price,
};
});
filteredIncome.total_amount = income.total_amount;
resolve(filteredIncome);
});
};
const filterArrayIncome = (incomeArray) => {
return new Promise((resolve, reject) => {
let filteredIncome = incomeArray.map((eachIncome) => {
return filterIncomeFunc(eachIncome);
});
resolve(filteredIncome);
});
};
因为我想要干代码,所以我在filterIncomeFunc
里面使用filterArrayIncome
在 filterArrayIncome 内部,console.log 结果是这样的。
======================
[
Promise {
{
services: [Array],
total_amount: 18000
}
},
Promise {
{
services: [Array],
total_amount: 18000
}
},
]
======================
是的,这些都是回报的承诺。我已经在filterArrayIncome
函数内部解决了
解决方案
您可以在承诺链中使用非承诺。
Promise.resolve('a').then(() => 'b');
解析为“b”;
您的过滤器函数不需要返回承诺,只需让它们返回值。
他们返回承诺是没有意义的,因为无论如何他们都有同步操作所需的一切。
推荐阅读
- jquery - 使用 jQuery 检查表是否具有属性值
- ios - Siri 快捷方式运行命令
- telegram - 机器人可以成为电报频道的管理员吗?
- css - z-index:将子元素定位在容器下方
- linux - 等待来自父母的信号并再次完成工作和阻塞
- data-structures - 用于计数组合出现的数据结构
- common-lisp - 有没有办法捕捉定义 Common Lisp 包的时刻?
- machine-learning - 如何从智能电表客户的负载曲线中找到峰值数量?
- android - 如何在android中挂钩opengl es以获取draw call的数量?
- latex - 强制 Sphinx 使用 longtable 指令,在长表中正确添加分页符