Javascript NodeJS将无序数据作为API响应发送

Javascript NodeJS将无序数据作为API响应发送,javascript,node.js,api,node-async,Javascript,Node.js,Api,Node Async,我已经编写了一个API端点,它在经过一个包含n个用户id的数组后,将n个用户的用户名作为响应发回。这是我说的代码 //Fetch username of user app.post('/users/uname', (req, res) => { const uidArr = req.body.uid const len = uidArr.length var unameArr = [] for(var i=0;i<len;i++){ U

我已经编写了一个API端点,它在经过一个包含
n
个用户id的数组后,将
n
个用户的用户名作为响应发回。这是我说的代码

//Fetch username of user
app.post('/users/uname', (req, res) => {
    const uidArr = req.body.uid
    const len = uidArr.length
    var unameArr = []
    for(var i=0;i<len;i++){
        User.findById(uidArr[i]).then((user) => {
            if(!user){
                unameArr[i] = ""
            }

            unameArr.push(user.username)
            if(unameArr.length==len){
                res.send(unameArr)
            }
        }).catch((error) => {
            unameArr[i] = ""
        })
    }
})
根据元素在数组中的位置,我期望的请求如下所示

[
    "user_one",
    "user_one",
    "user_two",
    "user_one",
    "user_one",
    "user_two"
]
但是我得到的实际输出是混合的,如Postman的截图所示

||

此问题背后的原因是什么?如何解决此问题

const uidArr = req.body.uid
let uids = []
User.find({},{'username':1,"_id":0})
.where('_id')
.in(uidArr)
.then(docs=>{
    docs.forEach(doc=>uids.push(doc.username))
    console.log(uids) //send this back to client
})
const uidArr = req.body.uid
let uids = []
User.find({},{'username':1,"_id":0})
.where('_id')
.in(uidArr)
.then(docs=>{
    docs.forEach(doc=>uids.push(doc.username))
    console.log(uids) //send this back to client
})