node.js - Node.js 数据库结果在函数内部返回较晚
问题描述
Node.js 数据库结果在函数内部返回较晚
常量 db = req.app.db;
function getFeaturebyID(featureids) {
db.planFeatures.findOne({"_id": featureids }).then(features => {
return features.planFeaturesTitle;
});
}
const planLists ={};
db.planManagement.find({}).toArray((err, planList) => {
// res.end(JSON.stringify(planList));
featurearray = [];
var j =1;
planList.forEach(function(row) {
planLists._id = row._id;
features = row.planFeatures.split(',');
for (let i = 0; i < features.length; i++) {
featurearray[i] = getFeaturebyID(features[i]);
// console.log(getFeaturebyID(features[i]));
}
//row.planFeaturesName[j] = featurearray;
console.log(featurearray);
j++;
});
//console.log(planList);
// res.end(JSON.stringify(req.session));
res.render('stylist/plan_selection', {
top_results: planList,
title: 'Schedule',
config: req.app.config,
session: req.session,
message: common.clearSessionValue(req.session, 'message'),
messageType: common.clearSessionValue(req.session, 'messageType'),
helpers: req.handlebars.helpers,
showFooter: 'showFooter'
});
});
});
返回 features.planFeaturesTitle;调用函数时延迟返回值。我尝试回调但不起作用
解决方案
这是由于 node.js 的异步特性,
首先像这样声明你的函数异步,
const getFeaturebyID = async (featureids) => {
const features = await db.planFeatures.findOne({"_id": featureids });
return features.planFeaturesTitle;
}
然后像这样使用它,
planList.forEach(async (row) => {
// your code here
for (let i = 0; i < features.length; i++) {
featurearray[i] = await getFeaturebyID(features[i]);
}
// your code here
});
推荐阅读
- angular - 在 Observable 中更改数组中的对象
不是带有 rxjs 的数组本身 - python - 如何在网站 https://www.wikiloc.com/wikiloc/download.do?id=41057284 中单击带有文本的按钮作为获取应用程序
- python - 输入路径不存在 apache-spark
- java - RecyclerView Adapter 的 notifyItemRangeChanged 很慢?
- r - 使用 `texreg` 显示 AIC、BIC gof stats
- php - 从复选框中获取值
- java - Java replaceAll ' with '' 除了第一次和最后一次出现
- python - 带有两个布尔数组的 For 循环的 If 条件中的 ValueError
- asp.net - 知道 ASP.NET 是阻塞和同步的,ASP.NET 如何比 Node.js 快?
- java - 运行 JUnit 测试类时如何重启 SpringBootApplication 应用程序