javascript restler如何阻止/等待请求
为了下载文件,我在服务器端脚本(而不是从客户端web浏览器)中使用nodejs中的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
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也不能,因为这意味着即使请求的服务器没有响应,节点进程也必须阻塞。这通常与异步范例的概念背道而驰。我仍然会问:如果您可以用异步请求覆盖任何场景,那么为什么需要同步请求?如果您要解释您的需求,解决方案必须非常简单。