2012-03-03 38 views
8

Có phiên bản đồng bộ của phương thức http.get trong node.js không?Node.js: Có phiên bản đồng bộ của phương thức `http.get` trong node.js không?

Cái gì như:

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

}); 

console.log(response) 

Đôi khi nó sẽ rất hữu ích.

+0

Đồng bộ I/O đôi khi hữu ích nhưng đó không phải là ý định của thời gian chạy theo sự kiện là node.js - cô ấy được xây dựng cho tốc độ, không thoải mái! =) – maerics

Trả lời

-6

Không, không có. Tôi thành thật không thấy trường hợp sử dụng.

Nếu bạn mở rộng trường hợp sử dụng của bạn hoặc một vấn đề mà bạn đang cố gắng giải quyết, tôi sẽ cố gắng trả lời.

+8

Làm thế nào về điều này cho một trường hợp sử dụng: Thực hiện một yêu cầu http trong quá trình khởi tạo máy chủ để kéo dữ liệu cấu hình trước khi bắt đầu một ứng dụng. Chắc chắn, bạn có thể thêm logic để xử lý điều này một cách không đồng bộ nhưng thực hiện dễ dàng hơn theo kiểu đồng bộ. – VinnyD

+2

Có 5000 hàng, cần gọi một yêu cầu http cho mỗi hàng: - /, id = 0; var x = function() {http.get ('http: // foo', function() {id ++; if (id < rows.length) x();}); } x(); ..... hoặc x.forEach (function() {http.get ('http: // foo', function() {end!});}); .... là rất sạch sẽ gọi một forEach và ít mã. Không thể là tất cả phần mềm được tạo ra đều là asyncs, hoàn toàn không biết gì. Đã được phát triển bằng hơn 14 ngôn ngữ khác nhau và tôi có thể nói rằng luôn có những lúc bạn cần một hàm được đồng bộ hóa. –

+1

Điều này không trả lời câu hỏi – vikramaditya234

2

Có thư viện sync-request khá dễ sử dụng. Bên trong nó sinh ra một tiến trình con đồng bộ và sử dụng then-request, vì vậy các tùy chọn tương tự như thư viện đó.

Như những người khác đã nêu, tôi sẽ thận trọng khi sử dụng điều này trong logic thời gian chạy của bạn. Tuy nhiên, nó có thể rất tiện dụng để tải cấu hình.

Nếu bạn đang tải cấu hình, một chiến lược khác có thể sử dụng tập lệnh riêng để bắt đầu quá trình của bạn. Ví dụ:

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); 
Các vấn đề liên quan