所以我按照指南使用twit将图像上传到twitter w节点。
这是我的代码
function upload_random_image(){
console.log('Opening an image...');
var image_path = path.join(__dirname, '/random_cam/' + random_cam()),
b64content = fs.readFileSync(image_path, { encoding: 'base64' });
console.log('Uploading an image...');
T.post('media/upload', { media_data: b64content }, function (err, data, response) {
if (!err){
console.log('ERROR');
console.log(err);
}
else{
console.log('Uploaded an image!');
T.post('statuses/update', {
media_ids: new Array(data.media_id_string)
},
function(err, data, response) {
if (!err){
console.log('Error!');
console.log(err);
}
else{
console.log('Posted an image!');
}
}
);
}
});
}
也许我错过了回调函数的一些东西,我知道如果必须是一个函数,但我无法理解为什么我的函数不起作用。
错误:
throw new TypeError('"callback" argument must be a function');
完整代码:
var Twit = require('twit')
var fs = require('fs'),
path = require('path'),
Twit = require('twit'),
config = require(path.join(__dirname, 'config.js'));
var T = new Twit(config);
function random_cam(){
var random_pic = [
'1.jpg',
'2.jpg',
'3.jpg'
];
return random_pic[Math.floor(Math.random() * random_pic.length)];
}
function upload_random_image(){
console.log('Opening an image...');
var image_path = path.join(__dirname, '/random_cam/' + random_cam()),
b64content = fs.readFileSync(image_path, { encoding: 'base64' });
console.log('Uploading an image...');
T.post('media/upload', { media_data: b64content }, function (err, data, response) {
if (err){
console.log('ERROR');
console.log(err);
}
else{
console.log('Uploaded an image!');
T.post('statuses/update', {
media_ids: new Array(data.media_id_string)
},
function(err, data, response) {
if (err){
console.log('Error!');
console.log(err);
}
else{
console.log('Posted an image!');
}
}
);
}
});
}
setInterval(
upload_random_image(),
10000
);
完成错误:
Opening an image...
Uploading an image...
timers.js:414
throw new TypeError('"callback" argument must be a function');
^
TypeError: "callback" argument must be a function
at exports.setInterval (timers.js:414:11)
at Object.<anonymous> (/Users/imac/test/server.js:72:1)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3
答案 0 :(得分:6)
你声明setInterval()不正确,正确的方法是
setInterval(function(){upload_random_image()},10000);
var Twit = require('twit')
var fs = require('fs'),
path = require('path'),
Twit = require('twit'),
config = require(path.join(__dirname, 'config.js'));
var T = new Twit(config);
function random_cam(){
var random_pic = [
'1.jpg',
'2.jpg',
'3.jpg'
];
return random_pic[Math.floor(Math.random() * random_pic.length)];
}
function upload_random_image(){
console.log('Opening an image...');
var image_path = path.join(__dirname, '/random_cam/' + random_cam()),
b64content = fs.readFileSync(image_path, { encoding: 'base64' });
console.log('Uploading an image...');
T.post('media/upload', { media_data: b64content }, function (err, data, response) {
if (err){
console.log('ERROR');
console.log(err);
}
else{
console.log('Uploaded an image!');
T.post('statuses/update', {
media_ids: new Array(data.media_id_string)
},
function(err, data, response) {
if (err){
console.log('Error!');
console.log(err);
}
else{
console.log('Posted an image!');
}
}
);
}
});
}
setInterval(function(){
upload_random_image()
},10000);
答案 1 :(得分:5)
背景
setInterval
expects a function作为第一个参数。
在您的代码中
setInterval(upload_random_image(), 10000);
upload_random_image
正在被调用,什么也不返回。
解决方案
就像提到的Karthikeyan一样,为了仍然调用upload_random_image,最好的办法是将其包装在一个函数中:
setInterval(() => upload_random_image(), 10000)
答案 2 :(得分:0)
不要按照 sophia.onion 的建议将您的函数包装在另一个匿名函数中。只需删除括号,以便传递函数引用而不是执行的函数。
问题:这会执行函数 upload_random_image 而不是将其作为参数传递。
setInterval(upload_random_image(), 10000);
解决方案:传递函数引用而不是执行。
setInterval(upload_random_image, 10000);