【发布时间】:2021-07-10 09:00:47
【问题描述】:
我正在使用节点和角度构建一个应用程序,当我请求这个特定的端点时,我得到一个空数组“[]”的返回。我将 return 语句放在最后的 'then' 块中,但这会在前一个 for 循环之前执行。
如何使这个同步,以便 realTemps 数组在 for 循环中填充,然后在下一个 then 语句中返回?
router.get("", (req, res, next) => {
var templates = [];
var realTemps = [];
const token = req.headers.authorization.split(" ");
const decoded = jwt.verify(token[1], 'secretkey');
decodedFactoryId = decoded.factoryId
Template.findAllByFactoryId(decodedFactoryId)
.then((results) => {
for (var i = 0; i < results.length; i++) {
// THIS IS AN AVOIDABLE LOOP, quadratic time must be prevented by correctly formatting the data (TODO)
for (var j = 0; j < results.length; j++) {
if (results[i][j].id) {
templates.push(results[i][j].id)
}
}
}
}).then(() => {
console.log("templates: " + templates)
for (var i = 0; i < templates.length; i++) {
console.log(templates[i])
Template.findByTemplateId(templates[i]).then(result => {
console.log("here is the result: " + JSON.stringify(result[0]))
realTemps.push(result);
})
}
})
.then(() => {
return realTemps;
})
})
【问题讨论】:
-
Template.findByTemplateId(templates[i]).then()仍然会晚于外部then()链完成。我建议用awaits 重新编写它,让自己更简单。 -
如果它在请求函数中,如何将其重写为等待?
-
如果您愿意,可以通过使其异步或将该逻辑提取到异步函数中然后调用。
标签: javascript node.js mean-stack