提前感谢任何阅读此内容的人。
我需要能够在特定时间将gcm消息(通知)发送到客户端ID列表。
我正在尝试使用Agenda.js,因为它有一个持久层。
以下代码似乎最初工作得很好,完全按照它应该执行。但是,经过一段时间让服务器无所事事,该作业将开始循环执行。
它还包括
“警告:过去的日期。永远不会被解雇。”
这是相关代码。
@AppModule({
// modules: [MyModule],
providers: [...]
pipes: [OtherPipe]
})
class MyModule {}
bootstrap(AppCmp, {modules: [RouterModule, MyModule])
有没有人知道为什么会发生这种情况?有关如何调试此问题的任何提示?
谢谢!
答案 0 :(得分:1)
我解决了这个问题。我添加了job.remove功能,它不再是spazzes。
var agenda = new agenda({db: {address: configParams.db}});
schedule_notifications = function(req) {
// define an agenda task named notify
agenda.define('notify', function(job, done) {
// create a gcm message
var message = new gcm.Message({
notification: { "body": 'test' }
});
var sender = new gcm.Sender('server id');
var regTokens = ['phone id'];
// send the message
sender.send(message, { registrationTokens: regTokens }, function(err, response) {
if (err) console.error(err);
else console.log(response);
done();
});
job.remove(function(err) {
if(!err) console.log("Successfully removed job from collection");
})
});
// get the object from the request
var req_json = JSON.parse(req.body.data),
keys = Object.keys(req_json),
key_string = keys[0],
start_obj = new Date(req_json[key_string][0].start);
// schedule the job with the date object found in the request
// start_obj, for example could be made using
// start_obj = new Date();
// notify is the name of the job to run
agenda.schedule(start_obj, 'notify');
agenda.start();
// can comment agenda.schedule and uncomment the following line to delete the unfinished jobs in db
// agenda.purge(function(err, numRemoved) {});
}