【问题标题】:How to make the setTimeout sequential for multiple database updates?如何使多个数据库更新的 setTimeout 顺序?
【发布时间】:2020-09-29 16:30:21
【问题描述】:

我正在使用 setTimeout() 更新数据库字段。因此,当更新是多个时,会发生最后一个主键用于所有更新。如何按顺序运行 setTimeout() 函数。以下是执行此操作的代码部分。

for( var i = 0; i < req.body.devicelist.length; i++) {     //running for loop for multiple elements 
   var data = JSONPARSE.toObject(req.body);
   mac_id = req.body.devicelist[i];
   data.mac_id = mac_id;
   var gateway_config;

   for (let j = 0; j < gateways_config.length; j++) {                 //code for fetching specific element. IGNORE
      if(gateways_config[j].latest_config.mac_id == mac_id){
         gateway_config = gateways_config[j]
         break;
      }
         gateway_config = undefined
   }
   
   await syncConfig(req.body,gateway_config, req.decoded.id);  
   ..........
   ..........
}


syncConfig(body,gateway,user_id){
   var jsonObj = body;
   ...
   ...
   ...
   config_timeout_array[jsonObj.mac_id] = setTimeout(() => {       //Causing problem
      commandTimeout(jsonObj.org_id,jsonObj.mac_id)
   }, 10000);
   ...
   ...
}

commandTimeout:(org_id, mac_id) =>{
   
   console.log(mac_id);  //prints same mac_id (the last in the array)

   return gateway_model.findOneAndUpdate({ org_id: org_id, mac_id: mac_id }, { 'sync_sent': false }, {"new": true})
      .then((updated_gateway) => {
         ...
         ...
         ...
      }
}

【问题讨论】:

    标签: node.js express settimeout


    【解决方案1】:
    config_timeout_array[jsonObj.mac_id] = setTimeout(() => {       //Causing problem
          commandTimeout(jsonObj.org_id,jsonObj.mac_id)
       }, 10000);
    

    不是直接做上面的逻辑,而是调用一个函数并在那里做。我不知道为什么,但它奏效了!

    seqTimeout(jsonObj.org_id,jsonObj.mac_id);       //function call
    
    
    seqTimeout(org_id,mac_id){
        config_timeout_array[mac_id] = setTimeout(() => {
            GatewayController.commandTimeout(org_id, mac_id);
        }, COMMAND_TIMEOUT);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-15
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多