Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将http响应流式传输到文件,在503上重试_Javascript_Node.js_Http_Stream - Fatal编程技术网

Javascript 如何将http响应流式传输到文件,在503上重试

Javascript 如何将http响应流式传输到文件,在503上重试,javascript,node.js,http,stream,Javascript,Node.js,Http,Stream,将http请求的响应管道化到文件非常简单: http.get(url, function (res) { var file = fs.createWriteStream(filename) res.pipe(file) file.on('finish', function () { file.close() }) }) 但当我试图建立一个重试系统时,事情变得复杂了。我可以根据res.statusCode决定是否重试,但如果我决定重试,这意味着不将响应管道化到可写流,因此

将http请求的响应管道化到文件非常简单:

http.get(url, function (res) {
  var file = fs.createWriteStream(filename)
  res.pipe(file)
  file.on('finish', function () {
    file.close()
  })
})
但当我试图建立一个重试系统时,事情变得复杂了。我可以根据
res.statusCode
决定是否重试,但如果我决定重试,这意味着不将响应管道化到可写流,因此响应保持打开状态。当我进行多次重试时,这会大大降低执行速度。解决方法是(无用地)监听
数据
结束
事件,只是为了让响应关闭,但是如果我决定不重试,我就不能再通过管道发送到writeStream,因为响应现在已关闭


无论如何,我肯定不是唯一一个想要将http请求的响应流式传输到文件,当我得到503时重试的人,但我似乎找不到任何代码“在那里”可以做到这一点。

解决了。当很多响应都处于打开状态(未使用)时,就会出现慢度。解决方案是
response.resume()
response,在需要重试时让它们“虚无地吐出”。所以在伪代码中:

http.get(url, function (response) {
  if (response.statusCode !== 200) {
    response.resume()
    retry()
  } else {
    response.pipe(file)
  }
})

我最初的问题是,我正在检查Wheet to retry(是否重试)是否太迟,迫使我在做出决定之前“吐到虚无中”,这使得我无法决定不重试,因为响应“流”中的数据已被消耗。

我对您想要的行为有点不清楚。我看到的是:如果响应不是503,则流式传输它。如果是503,请重试。如果重试成功,则流式传输该回复。到现在为止,一直都还不错。但在某些情况下,您可能会开始重试,但后来决定还是要原始响应。这是什么情况?不完全是,看我的答案