30/09/2018, 19:32

Làm sao để lập trình đồng bộ trên nodejs

Em đang có vấn đề sau
Ví dụ:

var request = require('request');
for(var k=1; k<=10; k++){
	var url = 'http://www.24h.com.vn/'+k;
	request(url, function(err, response, body){  
		console.log(k);
	})
}

Khi chạy thì sẽ in ra 10 số 11. Nhưng em muốn in ra từ 1 đến 10
Em muốn thực hiện xong hàm callback thì mới tiếp tục vòng lặp thì phải làm thế nào ạ?
Mong mọi người giúp đỡ
Em mới học Nodejs nên mọi người thông cảm

IDL viết 21:33 ngày 30/09/2018

Muốn đồng bộ thì xài cái này:
npm install sync-request

var request = require('sync-request');
var k = 1;
for (k; k <= 10; k++) {
  console.log(k);
  request('GET', 'http://www.24h.com.vn/' + k);
}
Chiến Minh Nguyễn viết 21:36 ngày 30/09/2018

Vâng, cám ơn anh nhưng em muốn một số hàm khác cũng đồng bộ
Em có tìm trên mạng thấy 1 cách là:

var request = require('request');
for(var k=1; k<=10; k++){
	var check;
	var url = 'http://www.24h.com.vn/'+k;
	request(url, function(err, response, body){  
		console.log(k);
		check=1;
	});
	while(check === undefined){};
}

Nhưng em làm thế nó không chạy à? Anh giải thích dùm em cái được k?

Lập Trình Sư viết 21:42 ngày 30/09/2018

code để trong callback thì lúc nào chẳng async.

Wrap vào trong q hoặc async

lite2210 viết 21:45 ngày 30/09/2018

Ưu điểm của nodejs là bất đồng bộ mà bắt đồng bộ thì phí phạm quá. Bạn có thể dùng promise, async để ép nó đồng bộ theo ý bạn, nhưng không khuyến khích.

Bạn nên suy nghĩ theo hướng bất đồng bộ, để code chạy tuần tự, nodejs sẽ tự biết chờ, ko nên ép nó phải chờ. Đơn giản nhất là callback. Cẩn thận với callback hell

Bài liên quan
0