Javascript回调函数-Node.js

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);

我有两个功能

1)
下载(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);
});