Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 restler如何阻止/等待请求_Javascript_Node.js - Fatal编程技术网

javascript restler如何阻止/等待请求

javascript restler如何阻止/等待请求,javascript,node.js,Javascript,Node.js,为了下载文件,我在服务器端脚本(而不是从客户端web浏览器)中使用nodejs中的restler 我可以使用异步方式在下载完成时触发事件,如下所示: rest = require('./restler'); rest.get('http://google.com').on('complete', function(result) { if (result instanceof Error) { sys.puts('Error: ' + result.message); thi

为了下载文件,我在服务器端脚本(而不是从客户端web浏览器)中使用nodejs中的restler

我可以使用异步方式在下载完成时触发事件,如下所示:

rest = require('./restler');
rest.get('http://google.com').on('complete', function(result) {
  if (result instanceof Error) {
    sys.puts('Error: ' + result.message);
    this.retry(5000); // try again after 5 sec
  } else {
    sys.puts(result);
  }
});
但这次我更喜欢使用同步方式

我如何调用此命令并阻止/等待收到响应?

以及之后如何获取数据或错误

var req = rest.get('http://twaud.io/api/v1/users/danwrong.json');
// how to block/wait here until file is downloaded
if (req.response instanceof Error) {  // this does not worn neither
  ...
} else {
  ...
}

我认为您正在寻找一个类似的库,它将使restler看起来是同步的

您为它提供了一系列函数,以便您可以以更线性的方式编写代码

var rest = require('restler');
var Step = require('step');
var sys = require('sys');

function retry(millis) {
    console.log('Queing another try');
    setTimeout(download, millis);
}

function download() {
    Step(function() {
            // 1
            console.log('Starting download');
            rest.get('http://google.com').on('complete', this);
        },
        function(result) {
            // 2
            console.log('Download complete');
            if (result instanceof Error) {
                sys.puts('Error: ' + result.message);
                retry(5000); // try again after 5 sec
            } else {
                sys.puts(result);
            }
            return result;
        },
        function(result) {
            // 3
            console.log("This won't run until after Download is complete");
        });
}
download();

使用异步方法有一个很大的原因,您将阻止涉及到空闲其他请求/响应的整个过程。总有一种方法可以绕过它并使用实际的异步方法。请您描述一下您希望出现阻塞情况的原因,并且可能有一个很好的解决方案可以让您保持异步,以满足您的挑战的逻辑需求。它不是客户端浏览器中的脚本。它是服务器中的一个简单脚本,在下载就绪时运行并完成。我这里不需要任何异步。它将下载并触发“完成”同步或异步,这与当时无关。那么,如果async是相同的结果,“为什么要进行同步”这个问题呢?无论如何
restler
没有
sync
方法或方法选项。您可以自己实现它。使用sync或async有优点和缺点,这是一个非常有趣的讨论。然而,这不是这个问题的目的。在这个问题中,我问我如何阻止/等待restler得到响应。答案是:
restler
没有这样的功能。nodejs请求libs也不能,因为这意味着即使请求的服务器没有响应,节点进程也必须阻塞。这通常与异步范例的概念背道而驰。我仍然会问:如果您可以用异步请求覆盖任何场景,那么为什么需要同步请求?如果您要解释您的需求,解决方案必须非常简单。