值未插入数组中,数组返回空白值
Posted
技术标签:
【中文标题】值未插入数组中,数组返回空白值【英文标题】:Value is not getting inserted in the array,array returns blank values 【发布时间】:2020-04-15 23:56:16 【问题描述】:我有以下代码,问题是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
【问题讨论】:
clinicslotsfunc
可能是异步函数。尝试在 arr.push 之后记录 arr 然后阻塞
我真的会建议你习惯使用调试工具来应对这种情况。这是教程的链接youtube.com/watch?v=H0XScE08hy8
@Sunil 它在 arr.push 之后记录 arr。我想退回这个 arr。
【参考方案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;
【讨论】:
如何从这个异步 yourmethod() 返回 arr ? 它返回 Promiseconsole.log(result)
和console.log(result.data)
的结果吗?
对于 console.log(result) 它记录 slot: '18:15:00', isbooked: 1 对于 console.log(result.data) 它记录未定义。
因为clinicslotsfunc本身就是一个promise,Sequelize查询。它正在等待续集承诺完成。这就是为什么。无论如何,感谢您抽出宝贵的时间。【参考方案2】:
由于 clinicslotsfunc 返回一个承诺(异步运行),'.then' 部分会在未来某个时间执行,因此 obj 会在未来某个时间被推送到数组承诺不会拒绝。
现在既然你在做 console.log(arr);在这个异步任务之后,它是空的,因为 clinicslotsfunc.then() 不会立即运行。因此,您的数组始终记录为空,因为该数组将来会被填充。
【讨论】:
我知道,我希望将值插入到数组中。以上是关于值未插入数组中,数组返回空白值的主要内容,如果未能解决你的问题,请参考以下文章