2017-11-28 9 views
2
var job = new cronJob('* * * * * *', function() { 
    //find and send message using cron job 

    Quicksms.findOne({ 
     attributes: ['id', 'phoneno', 'sender', 'message', 'isSent'], 
     raw: true 
    }).then(data => { 
     console.log('data:', data); 
     // var filteredData = datas.filter(data => data.isSent === 0); 
     // console.log('filteredData:', filteredData); 
     // for (var i = 0; i < data.length; i++) { 
     // if (data.isSent === 0) { 
     var uri = '/api/user=test&password=test&sender=' + 
      data.sender + '&SMSText=' + data.message + '&GSM=' + data.phoneno; 
     var sms = encodeURI(uri); 
     var options = { 
      host: 'test.com', 
      port: 80, 
      path: sms, 
      method: 'GET' 
     }; 
     http.request(options, function (res) { 
      console.log('STATUS: ' + res.statusCode); 
      console.log('HEADERS: ' + JSON.stringify(res.headers)); 
      res.setEncoding('utf8'); 
      res.on('data', function (chunk) { 
       console.log('BODY: ' + chunk); 
      }); 
     }).end(); 


     //update into 1 true: 
     Quicksms.update({ 
      isSent: 'true' 
     }, { 
      where: { 
       id: data.id 
      } 
     }) 
     // } 
     // } 


     //store in log 
     QuicksmsLog.create({ 
      phoneno: data.phoneno, 
      sender: data.sender, 
      message: data.message, 
      isSent: data.isSent 
     }).then(function (data) { 
      if (data) { 
       console.log("successfully stored in log"); 
      } else { 
       console.log("failed"); 
      } 
     }) 


     //destroy message after sending 
     Quicksms.destroy({ 
      where: { 
       isSent: 1 
      } 
     }).then(delData => { 
      console.log('cronJob deleted successfully.', delData); 
     }); 
    }); 
}, function() { 
    console.log('DelCron Job finished.'); 
}, true, 'Asia/Calcutta'); 

で順序によって、同期として私の下のコードを実行したい:私がオーダー 非同期順序非同期として働いているコードの上nodejs

1.Quicksms.findone

2.Quicksms.Delete

3.Quicksms.Update

4.Quicksmslogs.Create

この1つは非同期として動作し、私はこの機能をオーダとして動作させたい!

これを同期方法で行うにはどうすればよいですか?助けてください

どのような非同期タスクの使用ですか? nodejsでは、私は初心者です!助けて。

+0

[非同期](https://www.npmjs.com/package/async) – Vineet

+0

あなたは私を助け、いくつかの回答を投稿することができますか?私はやり方を知らない、私は初心者です! –

答えて

2

これは、async await操作を使用して行うことができます。以下のコードを実行してみてください。

var job = new cronJob('* * * * * *', async function() { 
    //find and send message using cron job 

    await Quicksms.findOne({ 
     attributes: ['id', 'phoneno', 'sender', 'message', 'isSent'], 
     raw: true 
    }).then(data => { 
     console.log('data:', data); 
     // var filteredData = datas.filter(data => data.isSent === 0); 
     // console.log('filteredData:', filteredData); 
     // for (var i = 0; i < data.length; i++) { 
     // if (data.isSent === 0) { 
     var uri = '/api/user=test&password=test&sender=' + 
      data.sender + '&SMSText=' + data.message + '&GSM=' + data.phoneno; 
     var sms = encodeURI(uri); 
     var options = { 
      host: 'test.com', 
      port: 80, 
      path: sms, 
      method: 'GET' 
     }; 
     http.request(options, function (res) { 
      console.log('STATUS: ' + res.statusCode); 
      console.log('HEADERS: ' + JSON.stringify(res.headers)); 
      res.setEncoding('utf8'); 
      res.on('data', function (chunk) { 
       console.log('BODY: ' + chunk); 
      }); 
     }).end(); 


     //update into 1 true: 
     await Quicksms.update({ 
      isSent: 'true' 
     }, { 
      where: { 
       id: data.id 
      } 
     }) 
     // } 
     // } 


     //store in log 
     await QuicksmsLog.create({ 
      phoneno: data.phoneno, 
      sender: data.sender, 
      message: data.message, 
      isSent: data.isSent 
     }).then(function (data) { 
      if (data) { 
       console.log("successfully stored in log"); 
      } else { 
       console.log("failed"); 
      } 
     }) 


     //destroy message after sending 
     await Quicksms.destroy({ 
      where: { 
       isSent: 1 
      } 
     }).then(delData => { 
      console.log('cronJob deleted successfully.', delData); 
     }); 
    }); 
}, function() { 
    console.log('DelCron Job finished.'); 
}, true, 'Asia/Calcutta'); 
+1

いいね! @パヴァン –

2

Promiseを使用して、同期プロセスを実現する方法はさまざまです。上記のメソッドがPromiseのインスタンスであるように見えますが、私はそれらがそうであると確信します。伝統的な方法では、複数の約束のインスタンスからpromise chainを作ることができます。以下のサンプルコードを作成して、どのように動作するかを確認します。また、ES7の構文に精通している場合はAsync/Awaitも使用できます。しかし、node.jsを初めて使用しているので、私は前のアプローチの答えを残します。以下を確認してください。これがあなたを助けることを願っています!あなたが使用することができます

Quicksms.findone((...args)=>{ 
    ... 
    return Quicksms.Delete(...args); 
}) 
.then((...args)=>{ 
    ... 
    return Quicksms.Update(...args); 

}) 
.then((...args)=>{ 
    ... 
    return Quicksmslogs.Create(...args); 
}) 
.then((...args)=>{ 
    ... 
    console.log("Your jobs has been completed in order!"); 
}) 
.catch(err=>console.error(err)) 
関連する問題