2012-10-15 25 views
16

Tôi mới trong node.js và tập lệnh java, tôi không thể tìm thấy ý nghĩa của từ khóa ".on" này. khi tôi thay đổi nó với một mã từ khác không thành công.Trong node.js "request.on" nó là gì ".on"

var req = http.get("http://www.google.com", function(res) { 
    console.log("Got response: " + res.statusCode); 

res.on('data', function (chunk) { 
}); 

}).on('error', function(e) { 
console.log("Got error: " + e.message); 
}); 

Trả lời

18

Các trên phương pháp liên kết một sự kiện vào một đối tượng.

Đó là một cách để thể hiện ý định của bạn nếu có cái gì đó xảy ra (dữ liệu được gửi hoặc sai sót trong trường hợp của bạn), sau đó thực hiện chức năng thêm vào như một tham số. Kiểu lập trình này được gọi là Lập trình theo hướng sự kiện. Bạn có thể muốn nhìn nó trong các Wikipedia

Trong Node.js, có một lớp được gọi là EventEmitter cung cấp cho bạn với tất cả các mã mà bạn cần cho các sự kiện cơ bản nếu bạn quyết định sử dụng chúng trong của riêng bạn mã (mà tôi rất muốn giới thiệu trong trường hợp node.js). Documents cho Node.js EventEmitterhere

8

.on là một sử dụng phương pháp để ràng buộc xử lý sự kiện.

+0

cảm ơn bạn, tôi đoán tôi chưa tự mình tạo tài liệu với tài liệu node.js. – avicennasoftwarelabs

+0

Xem tài liệu cho 'luồng'. Kết quả của một yêu cầu HTTP là một luồng 'có thể đọc được 'và sẽ có tất cả các sự kiện và phương thức liên kết với nó. – ebohlman

2

Việc gọi lại cho http.get được gọi với một đối số duy nhất (mà bạn đã đặt tên req). req, viết tắt của "yêu cầu", là một tên phổ biến, bởi vì đối số này là một đối tượng http.ClientRequest. Đối tượng http.ClientRequest triển khai stream.Writable và đây là bit quan trọng: tất cả các luồng là các phiên bản của EventEmitter.

EventEmitter có chức năng gọi là on, bổ sung chức năng nghe cho một sự kiện được chỉ định.

"chức năng nghe" chỉ là tên gọi khác của "hàm callback"

Trong ví dụ của bạn, bạn đã thêm một người biết lắng nghe cho sự kiện data và sự kiện error. Các hàm của trình nghe là được gọi là (gọi lại từ "callback") bởi EventEmitter.

Điểm thêm

Nếu bạn cần một người biết lắng nghe để ngăn chặn nghe (ví dụ, bạn không còn muốn gọi lại của bạn được gọi là), bạn có thể loại bỏ một người biết lắng nghe với emitter.removeListener chức năng:

var myCallback = function(e) { console.log('Got error: ' + e.message); } 
res.on('error', myCallback); 
// do some things... 
res.removeListener('error', myCallback); 

Nếu bạn chỉ muốn người nghe chạy một lần, bạn có thể sử dụng emitter.once thay vì chức năng on và sau đó bạn sẽ không phải xóa nó:

res.once('error', myCallback); 
Các vấn đề liên quan