2017-02-15 10 views
0

데이터베이스의 각 만료 된 티켓에 대한 전자 메일을 보내려고합니다. 그것의 싹둑는 다음과 같습니다함수에서 사용되기 전에 데이터가 변경됩니다.

for (var i = 0; I < rows.length; ++i) { 
    if (today > new Date(rows[i].end_date)) { 
     (function(id) { 
      db.exec('update tickets ' + 
        'set status="expired" ' + 
        'where ticket_id= ' + id + ';' + 
        'insert into changes ' + 
        'values(' + id + ',' + 
         '"system",' + 
         '"ticket expired",' + 
         '"' + (today.getUTCMonth() + 1) + 
         '/' + today.getUTCDate() + 
         '/' + today.getUTCFullYear() + 
        '");', 
        function(err) { 
         if (err) { 
          console.log(err); 
          return; 
         } 

         console.log(id); 
         sendAlert(id); 
        } 
      ); 
     })(rows[i].ticket_id); 
    } 
} 

당신은 내가 변경하는 각 통화의 데이터를 유지하기 위해 익명 함수를 사용하려고하지만 여전히 작동하지 않았다 볼 수 있듯이.

내가 누락 된 부분이 있는지 알 수 없습니다.

답변

1

이 작업의 실행이 비동기 것으로 나타납니다. 비동기 호출을 반복 할 필요가있을 때 작업 순서는 보장되지 않습니다.

Async 또는 Promise과 같은 제어 흐름 라이브러리가 필요할 수 있습니다. 반복에서도 이러한 흐름을 제어하는 ​​몇 가지 방법이 있습니다.

+1

Promise 라이브러리 덕분에 잘 작동했습니다. 감사합니다. – ZergRush