这是我的代码:
app.post('/update', async (req, res, done) => {
let drive = req.app.get('drive');
let fileId = req.body.id;
let subject = req.body.subject;
let grade = req.body.grade;
let industry = req.body.industry;
await TagFile.findOne({id: fileId}, (err, res) => {
if (err) return console.log(err);
//console.log(res);
//console.log(subject);
takeRes(res);
})
function takeRes(res) {
for (let i = 0; i > subject.length; i++) {
if(!res[0].subject.includes(subject[i])) {
res[0].subject.push(subject[i]);
console.log(res[0].subject)
console.log("first was called")
}
else {
console.log(res[0].subject)
console.log("else was called.")
}
}
}
})
这是从我的网站发出的帖子请求。当到达需要使用 for 循环的步骤时,我在控制台中没有从 if else 语句中得到任何信息。我知道这可能与异步有关,但我并不完全理解它,并且希望朝着正确的方向推动。谢谢!
答案 0 :(得分:0)
当您使用 await
时,您不需要使用 callback
函数。使用以下代码段使用 mongoose 进行查询,其余部分取决于您的业务逻辑:
const res = await TagFile.findOne({id: fileId}).exec();
takeRes(res)
答案 1 :(得分:0)
%d
的结果是 findOne()
,object
的结果是 find()
,当您使用 array
时,findOne()
是不正确的,您可以使用 res[0]
将模型转换为对象,因此使用 find 如下:
lean()
当你使用 let res = await TagFile.find({ id: fileId }).lean();
for (let i = 0; i > subject.length; i++) {
if (!res[0].subject.includes(subject[i])) {
res[0].subject.push(subject[i]);
console.log(res[0].subject);
console.log("first was called");
} else {
console.log(res[0].subject);
console.log("else was called.");
}
}
时试试这样:
findOne