值未插入数组中,数组返回空白值

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 ? 它返回 Promise . @PrabhjotSinghKainth 你能显示console.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() 不会立即运行。因此,您的数组始终记录为空,因为该数组将来会被填充。

【讨论】:

我知道,我希望将值插入到数组中。

以上是关于值未插入数组中,数组返回空白值的主要内容,如果未能解决你的问题,请参考以下文章

Arrays.binarySearch的返回值

JavaScript数组常用方法

数据库中的值未插入codeIgniter?

Arrays.binarySearch()的返回值

找出元素在排序后数组中的索引

文本输入的更改值未返回