2017-02-15 11 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

関連する問題