setInterval中的函数等待,直到其他进程函数结束节点

时间:2018-07-25 14:23:11

标签: node.js

我的应用程序做了一些工作,然后查询数据库。它每3秒收割一次,该应用程序必须只有1个与db的活动连接,如果连接处于活动状态,则必须等待,然后这样做,我已经尝试过:

var state = false;
let l = 0;
function sleep(ms) {
   console.log('object');
   l++;
   return new Promise(resolve => setTimeout(resolve, ms));
}

async function lol(orderid) {

 if (state == true) {
    await sleep(1000 + l * 1000);
    let k = await lol(orderid);
    return k;
  };

   state = true;
   let res = await getOrders(`(${orderid})`, 1500, 20)
   state = false;
   return res;
}


let orderid = 14136377;

setInterval(async () => {
   let m = await lol(orderid++);
   console.log(m[0]['json_build_object']['order']['orderid']);
}, 1000);

现在,它每次递增时都会查询已排序的ID巫婆并输出它。这就是结果

enter image description here

条件if (state == true || l >0 )不响应,所有间隔呼叫均保持有效。 如您所见,有时它不是连续的。如何使其连续? 有没有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

如果认为这足够了。

let state = false;
let data = [];

getorerids().then(res => {
  if(state){
    data.push(res);
  }else {
    state = true;
    dbcall(res);
  }
});

dbcall(ids)
.then(res =>{
  dosmtwithids(res);
  if(data[0]){
    return dbcall(data.pop());
  }else {
    state = false;
  }
});

dosmtwithids(){
  .......
};

setInterval(getorerids, 3000);