![](/img/trans.png)
[英]mongoose model.findOne is not a function (Node.js | React Native)
[英]Array.push() inside Model.findOne() in Node js
我声明ids
数组并将id
推入其中。
我使用 Node.js 和 mongoose
这是我的代码
let ids = []
for (let i = 0; i < chatLen; i++) {
let id = chats[i].sender_id == reqUserid ? chats[i].receiver_id : chats[i].sender_i
if (ids.indexOf(id) == -1) {
User.findOne({
_id: new ObjectId(id)
}).then(data => {
if (data && data._id) {
console.log(data);
ids.push(data._id)
socket.emit('GetChatter', data)
}
})
}
}
如何将 id 推送到 ids 数组中?
您的代码正在运行,因为User.findOne()
是async
function。
试试这个代码。
let chatLen = chats.length;
GetUserFromChat(chatLen)
async function GetUserFromChat(chatLen) {
let ids = []
for (let i = 0; i < chatLen; i++) {
let id = chats[i].sender_id == reqUserid ? chats[i].receiver_id : chats[i].sender_id;
console.log(ids);
if (ids.indexOf(id) == -1) {
await User.findOne({
_id: new ObjectId(id)
}).then(data => {
if (data && data._id) {
socket.emit('GetChatter', data)
ids.push(data._id)
}
})
}
}
}
或者
如果你想要性能使用这个。
(async () => {
let FriendLen = req.user.friends.length;
const promises = [];
for (let i = 0; i < FriendLen; i++) {
const acc = Events.findOne({ host_id : req.user.friends[i] });
promises.push(acc)
}
const events = await Promise.all(promises);
})();
您的代码是async
评估的,这就是您的脚本无法按预期工作的原因。 如果要synchronously
执行迭代,可以使用async / await
:
function waitForUserIdAndEmitData(id) {
return User.findOne({
_id: new ObjectId(id)
}).then(data => {
if (data && data._id) {
socket.emit('GetChatter', data)
return data._id
}
})
}
async function iterate(chatLen) { // <- note "async"
let ids = []
for (let i = 0; i < chatLen; i++) {
let id = chats[i].sender_id == reqUserid ? chats[i].receiver_id : chats[i].sender_i
if (ids.indexOf(id) == -1) {
const userId = await waitForUserId(id) // <- note "await"
ids.push(userId)
}
}
console.log(ids)
}
iterate(chatLen)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.