繁体   English   中英

Node js 中 Model.findOne() 内的 Array.push()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM