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

时间:2019-12-25 08:33:06

标签: arrays node.js promise sequelize.js

我有以下代码,问题是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 }

2 个答案:

答案 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()不会立即运行。因此,您的数组始终记录为空,因为将来会填充该数组。