Javascript回调函数-Node.js
我有两个功能 1)Javascript回调函数-Node.js,javascript,node.js,callback,download,Javascript,Node.js,Callback,Download,我有两个功能 1) 下载(uri、文件名、回调)->将图像下载到特定位置 2) twitterPost(文件名)->推特图像 我需要异步执行此操作-因此在图像下载完成后,我调用twitterPost,但每次我都会收到此错误: throw new Error('File path does not exist: ' + media);
下载(uri、文件名、回调)
->将图像下载到特定位置2)
twitterPost(文件名)
->推特图像
我需要异步执行此操作-因此在图像下载完成后,我调用twitterPost
,但每次我都会收到此错误:
throw new Error('File path does not exist: ' + media);
^
Error: File path does not exist: Imgs/18478-wrt1114.jpg
现在我了解到出现这种情况是因为图像尚未下载,但是在管道关闭后调用回调函数是没有意义的。以下是这两个函数的代码:
function download(uri, filename, callback) {
request.head(uri, function(err, res, body) {
request(uri).pipe(fs.createWriteStream(filename)).on('end', callback);
});
};
及
这是我的函数调用:
download(image, filename,twitterPost(filename));
我是否错误地使用了回调,或者是否存在我没有注意到的导致此问题的其他问题
谢谢你的帮助 我认为您的问题是由于您向函数传递参数的方式
download(image, filename,twitterPost(filename));
在twitterPost(文件名)中检查您的文件名是否符合预期。我敢肯定不会的。这是因为您的twitterPost函数没有使用此参数调用。它被称为:
request(uri).pipe(fs.createWriteStream(filename)).on('end', callback);
也就是说,没有争论。我会:
request(uri).pipe(fs.createWriteStream(filename)).on('end', function(){
callback(filename);
});
我是否错误地使用回调
是的,您实际上并没有传递回调函数。您传递了立即调用twitterPost(filename)
的结果,这种情况甚至在调用download
之前就发生了,因此还没有这样的文件
围绕此调用使用函数表达式,以获取由下载调用的函数:
download(image, filename, function(endEvent) {
twitterPost(filename);
});
在调用download
之前,您正在调用该函数。这不是回调,也不是异步的-文件还不存在。谢谢!这就解决了问题。很好的解释,谢谢你的帮助
download(image, filename, function(endEvent) {
twitterPost(filename);
});