【问题标题】:Node.js: Is there a synchronous version of the `http.get` method in node.js?Node.js:node.js 中是否有同步版本的 `http.get` 方法?
【发布时间】:2012-03-21 13:18:46
【问题描述】:

node.js中有http.get方法的同步版本吗?

类似:

http.getSync({
    host: 'google.com', 
    port: 80, 
    path: '/'
}, function(response){  

});

console.log(response)

有时它会非常有用。

【问题讨论】:

  • 同步 I/O 有时很有用,但这不是 node.js 事件驱动运行时的意图——她是为速度而不是舒适而构建的! =)

标签: http node.js asynchronous get synchronous


【解决方案1】:

有一个很容易使用的sync-request 库。它在内部同步生成一个子进程并使用then-request,因此选项类似于该库。

正如其他人所说,我会告诫不要在您的运行时逻辑中使用它。但是,它可以非常方便地加载配置。

如果您正在加载配置,另一种策略可以是使用单独的脚本来启动您的进程。示例:

var http = require("http"),
    cp   = require("child_process");

// Starting process
if (process.argv.length < 3) {
    return http.get("http://www.google.com/index.html", function(res) {
        var config = {
            statusCode : res.statusCode,
            headers    : res.headers
        };

        cp.fork(module.filename, [JSON.stringify(config)]);
    });
}

// Config provided
var config = JSON.parse(process.argv[2]);

console.log(config.statusCode);

【讨论】:

    【解决方案2】:

    不,没有。老实说,我没有看到用例。

    如果您扩展您的用例或您要解决的问题,我会尝试回答。

    【讨论】:

    • 用例如何:在服务器初始化期间发出 http 请求以在启动应用程序之前拉入配置数据。当然,您可以添加逻辑来异步处理此问题,但以同步方式实现更容易。
    • 有5000行,每行需要调用一个http请求:-/, id=0;var x=function(){ http.get('foo', function(){ id++ ; if(idfoo', function(){ end! }); }); .... 非常干净地调用 forEach 和更少的代码。不可能所有创建的软件都是异步的,完全无知。以超过 14 种不同的语言开发,我可以说总有需要同步功能的时候。
    • 这不能回答问题
    • @vikramaditya234 在 2012 年(5 年前)它回答了这个问题;今天不确定。
    • @jprichardson 同意,遗憾忽略。你可以在答案中更改一些内容,以便我可以取消标记它。否则系统不允许我删除反对票
    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多