返回值和回调的函数 - 我如何同时获得两者?

时间:2015-10-11 19:47:39

标签: node.js callback promise pkgcloud

我正在使用pkgcloud构建一个管理我的openstack存储的Web服务(基于表达式)。我在下载文件时遇到问题。

pkgcloud api for download有点奇怪:它将错误和文件的元数据传递给回调函数,并从函数返回一个带有文件内容的可读流:

client.download({
    container: 'my-container',
    remote: 'my-file'
}, function(err, result) {
    // handle the download result
})).pipe(myFile);

我遇到的问题是 - 如何将错误,元数据和流一起收集?我需要元数据才能为我的结果设置内容类型,显然我需要错误才知道一切顺利(如果文件不存在,流仍然返回 - 只包含一个html错误消息,所以我不能指望错误)。

我试着这样称呼它:

router.get("/download", function (res, req) { 
 var stream = client.download(options, function (err, file) {
  if (err) {
    return res.status(err.status).json({'message' : 'Error downloading file from   storage: ' + err.details});
  } 
 }
 // I'd like to get the callback's err and file here somehow
 stream.pipe(res);
}); 

但问题是在调用回调之前将数据传送到res,因此回调没有帮助 - 它要么给我错误太晚,要么没有给我元数据。我也尝试将stream.pipe(res)移动到回调中,但它不起作用,因为在回调内部我无法访问结果流。

我想过使用promise,但是我怎么能告诉“等待”回调和返回值的承诺?我正在尝试使用一个函数来包装下载函数,该函数将在回调中使用一个承诺运行下载,并在返回的流上运行一个承诺,但是我该怎么做?

0 个答案:

没有答案