我正在创建一个简单的排队系统。这个票被插入到数组中,代替第一个visitTime大于1的票。这个数组只包含ticketId,在进行任何比较之前,必须使用mongoose findById(ticketId)方法在Mongo数据库中查找。
然而,在写了下面的代码后,我注意到,无论数组中的数据是什么,findIndex()方法总是返回索引0。
代码如下:
const ticketToInsertTime = convertTime(ticket.visitTime)
const index = que.activeTickets.findIndex(async (ticketId) => {
const ticketFromArray = await Ticket.findById(ticketId).exec()
const ticketTime = convertTime(ticketFromArray?.visitTime!)
return ticketTime > ticketToInsertTime
})
if (index < 0) {
que.activeTickets.push(ticket._id)
que.save()
} else {
que.activeTickets.splice(index, 0, ticket._id)
que.save()
}
function convertTime(time: string) {
const hour = parseInt(time.split(':')[0])
const minutes = parseInt(time.split(':')[1])
return (hour * 60 + minutes)
}
1条答案
按热度按时间lmyy7pcs1#
了解findIndex功能,当findIndex有一些返回值不是null或undefined时,它会将其视为true,然后返回index。
如果我们把你的问题异步函数返回Promise,那么带有void的promise本身不是null或undefined,所以在这种情况下,它返回的第一次promise的值的索引为0。
对于此解决方案:
1.创建一个原型findIndexAsync自定义函数来模拟findIndex函数。
1.将您匹配应用于数据库查询函数,如带有async的findById,并返回true,与从纯Javascript的findIndex方法返回的结果相同。
1.arr.findIndexAsync可以在异步函数内使用await来解析arr.findIndexAsync返回Promise