在heroku上部署了一个节点项目。使用Heroku Scheduler一些调度代码似乎运行但Twilio SMS调用什么都不做。此代码在调度程序之外工作。
这是从Heroku Scheduler运行的scheduler.js代码:
#!/usr/bin/env node
var config = require('../config');
var client = require('twilio')(config.accountSid, config.authToken);
function sayHello() {
console.log('Helloxxxx');
sendSms('+13476979750', 'from Scheduler');
console.log('goodbye-xxxx');
}
sayHello();
process.exit();
function sendSms(to, message) {
client.messages.create({
body: message,
to: to,
from: config.sendingNumber
}, function(err, data) {
if (err) {
console.error('Could not send message');
console.error(err);
} else {
console.error('SMS');
}
});
};
答案 0 :(得分:2)
Twilio开发者传道者在这里。
我相信Yoni的答案是正确的,因为在完成对Twilio API的HTTP请求之前,您正在退出该流程。然而,虽然承诺很酷,但我认为你不需要所有额外的代码才能使这项工作成功。相反,您可以在收到回调后退出流程。
试试这个:
#!/usr/bin/env node
var config = require('../config');
var client = require('twilio')(config.accountSid, config.authToken);
function sayHello() {
console.log('Helloxxxx');
sendSms('+13476979750', 'from Scheduler');
console.log('goodbye-xxxx');
}
sayHello();
function sendSms(to, message) {
client.messages.create({
body: message,
to: to,
from: config.sendingNumber
}, function(err, data) {
if (err) {
console.error('Could not send message');
console.error(err);
} else {
console.error('SMS');
}
process.exit();
});
};
答案 1 :(得分:1)
在我看来,你可能会遗漏一些异步处理逻辑,因此Heroku调度程序安排的一次性dyno在sayHello()有机会完成之前退出(通过process.exit())。
尝试使用类似的内容(使用q library)宣传您的代码:
#!/usr/bin/env node
var config = require('../config');
var client = require('twilio')(config.accountSid, config.authToken);
var Q = require('q');
function sayHello() {
console.log('Helloxxxx');
return sendSms('+13476979750', 'from Scheduler')
.then(function(){
return console.log('goodbye-xxxx');
})
}
function sendSms(to, message) {
var deferred = Q.defer();
client.messages.create({
body: message,
to: to,
from: config.sendingNumber
}, function(err, data) {
if (err) {
console.error('Could not send message');
console.error(err);
deferred.reject(err);
} else {
console.log('SMS');
deferred.resolve();
}
});
return deferred.promise();
};
sayHello()
.then(function(){
console.log('Exiting...')
process.exit();
});