我有以下代码,问题是obj未插入数组arr中。
let arr=[];
let frommilisec=1620000000;
let tomilisec=4680000000;
let slotmilisec=900000;
while(frommilisec<=tomilisec)
{
let timeslot_milisec=frommilisec+slotmilisec;
clinicslotsfunc(timeslot_milisec,maximumAppointment,clinicid,dated).then(results=>
{
let obj=results[0];
console.log(obj); // this displays { slot: '12:30:00', isbooked: 1 }
arr.push(obj);
});
console.log(arr) //this logs blank array
frommilisec=frommilisec+timeslot_milisec;
}
results[0]
包含数据{ slot: '12:30:00', isbooked: 1 }
答案 0 :(得分:1)
Promise是一个异步操作,因此您需要await
异步操作的结果:
async yourmethod()
{
let arr=[];
let frommilisec=1620000000;
let tomilisec=4680000000;
let slotmilisec=900000;
while(frommilisec<=tomilisec)
{
let timeslot_milisec=frommilisec+slotmilisec;
let result = await clinicslotsfunc(timeslot_milisec
, maximumAppointment, clinicid, dated);
arr.push(result);
});
console.log(arr);
frommilisec=frommilisec+timeslot_milisec;
return arr;
}
答案 1 :(得分:-1)
由于 clinicslotsfunc 返回一个promise(异步运行),因此'.then'部分在将来的某个时间执行,因此obj在将来的某个时间被推到数组中诺言不会拒绝。
现在,因为您正在执行console.log(arr);在执行此异步任务之后,它为空,因为 clinicslotsfunc.then()不会立即运行。因此,您的数组始终记录为空,因为将来会填充该数组。