Quy ước gọi lại chính của nút là chuyển một hàm với thông số đầu tiên là err
. Theo kinh nghiệm của tôi, nó luôn được an toàn để kiểm tra xem lỗi có đúng hay không - trong thực tế nếu lỗi của bạn xuất hiện vô giá trị khi có lỗi thì vấn đề nằm nhiều hơn với việc triển khai. Tôi sẽ luôn luôn mong đợi nếu err
là null mà không có lỗi xảy ra. Nó có thể gây nhầm lẫn do việc sử dụng các hàm riêng biệt cho các lỗi và thành công, một cái gì đó có nhiều hơn trong phong cách của JQuery.Ajax và các lời hứa. Tôi có xu hướng tìm thấy các callbacks kép để có một chút quá dài để gọi.
Cho ví dụ của bạn có vẻ như bạn đang sử dụng thư viện async tuyệt vời. Nếu tôi đang tìm cách thực hiện tùy chọn song song, đây là cách tôi thiết lập tùy chọn này:
function doAThing(callback) {
var err;
// do stuff here, maybe fill the err var
callback(err);
}
function doAsyncThings(callback) {
var tasks = [function(done) { // stuff to do in async
doAThing(function(err) {
done(err);
});
}];
async.parallel(tasks, function(err) { // single callback function
callback(err); // I send the error back up
});
}
Lưu ý rằng thay vì ném lỗi, tôi đã làm sôi động nó sao lưu chuỗi yêu cầu. Có vài trường hợp mà tôi muốn thực sự ném một lỗi vì bạn về cơ bản nói "sụp đổ toàn bộ ứng dụng".
Tôi thấy nó đơn giản hơn và giảm lượng thông số bạn phải sử dụng để gọi các chức năng của mình. Khi bạn sử dụng Công ước này trong suốt bạn, bạn có thể đơn giản hóa bằng cách đơn giản thông qua gọi lại như một tham số thay vì tạo ra một chức năng ẩn danh mới, như vậy:
function doAThing(callback) {
var err;
// do stuff here, maybe fill the err var
callback(err);
}
function doAsyncThings(callback) {
var tasks = [function(done) { // stuff to do in async
doAThing(done);
}];
async.parallel(tasks, callback); // the error is sent back to the original function
}
Tôi thấy rằng nhìn chung bạn muốn xử lý những sai sót trong các chức năng họ Vì vậy, trong trường hợp này, người gọi doAsyncThings
có thể kiểm tra xem có lỗi hay không và xử lý nó phù hợp với phạm vi của chính nó (và có thể cung cấp thông tin tốt hơn cho người dùng nếu nó là một API).
Tuy nhiên, bạn có thể giới thiệu ví dụ thứ hai về err == null (bình đẳng không nghiêm ngặt, mang cùng kết quả) –
Tôi sẽ giới thiệu nó chỉ khi nó được tạo tự động (ví dụ: bằng coffeescript). Nếu không, độ rõ ràng của mã sẽ vượt quá những cân nhắc khác. – punund
Tôi nghĩ đây là phương pháp phù hợp. Bạn có thể tìm thấy nguồn chính thức/tham chiếu cho "nó được thiết kế để được sử dụng trong thời trang này"? –