gpt4 book ai didi

javascript - 异步调用的nodejs循环

转载 作者:行者123 更新时间:2023-12-03 06:38:17 27 4
gpt4 key购买 nike

在这个nodejs函数中,我在mongodb中创建了几条记录使用 Mongoose 。计数器计算有多少。

export function createTimeslots(req, res){
var startDate = req.body.startDate;
var Duration = req.body.Duration;
var repeat = req.body.repeat;
var counter=0;

for(var i=0; i<repeat; i++){
var startTime = ... calculation
var endTime = ...calculation

var ts = {
startTime: startTime,
endTime: endTime,
};

TimeSlot.create(ts, function(err, timeslot){
counter = counter+1;
});
}

res.status(200).json(counter + ' timeslots created');

}

问题是结果始终是“已创建 0 个时隙”。我怀疑创建函数是异步的,当它完成时,我们不再在那里更新计数器。那么我该如何统计这些记录呢?(我知道我可以使用循环的计数器,但我计划进行验证并且在某些情况下不创建记录。谢谢:)

最佳答案

Promises将在这里为您提供帮助:

export function createTimeslots(req, res){
var startDate = req.body.startDate;
var Duration = req.body.Duration;
var repeat = req.body.repeat;
var counter=0;

var promises = [];

for(var i=0; i<repeat; i++){
var startTime = ... calculation
var endTime = ...calculation

var ts = {
startTime: startTime,
endTime: endTime,
};

promises.push(new Promise(function(resolve) {
TimeSlot.create(ts, function(err, timeslot) {
counter = counter+1;
resolve();
});
}));
}

Promise.all(promises).then(function() {
res.status(200).json(counter + ' timeslots created');
});
}

这将等到所有异步操作完成,然后才继续并创建返回消息。

关于javascript - 异步调用的nodejs循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088990/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com