【发布时间】:2017-01-19 18:52:43
【问题描述】:
您好,我正在编写一个脚本来每秒向特定的 url 发出请求,但是一旦我在 node-cron 回调中编写代码,我就会得到 TypeError request.get is not a function。这是我的代码
var request = require('request');
var generalConfig = require('./config.js')
var cron = require('node-cron');
var async = require('async');
var failures = {
webEndManager: 0,
userManager: 0
}
cron.schedule('* * * * * *', function () {
async.parallel({
webEndManager: function (callback) {
request.get({
url: generalConfig.webEndManager
},
function (error, response, body) {
if (response) {
failures.webEndManager = 0;
callback(null, 'success');
}
else {
failures.webEndManager = failures.webEndManager + 1;
if (failures.webEndManager == 1)
callback(null, 'fail');
else
callback(null, 'success');
}
});
console.log("one 3000");
},
userManager: function (callback) {
request.get({
url: generalConfig.userManager
},
function (error, response, body) {
if (response) {
failures.webEndManager = 0;
callback(null, 'success');
}
else {
failures.webEndManager = failures.webEndManager + 1;
if (failures.webEndManager == 1)
callback(null, 'fail');
else
callback(null, 'success');
}
});
console.log("one 5001");
},
}, function (err, results) {
// results is now equals to: {one: 'abc\n', two: 'xyz\n'}
console.log(results);
});
console.log('running a task every minute');
});
当异步代码不在 cron 回调中时,它工作正常。
【问题讨论】:
-
尝试在 cron.schedule 中移动
var request = require('request'); -
谢谢!!那行得通,但是为什么行得通?我的意思是请求在顶部之前是全局范围的,那么这个更改对代码有什么影响?
-
可能与 cron 包有关?我不知道。
-
cron 包无法引用在其外部声明的全局对象,因为它旨在作为独立运行。这就是为什么您需要在 cron 中声明请求的原因。
-
非常感谢!! @zerohero,请创建一个答案,以便我接受并关闭此问题
标签: javascript node.js cron