Tìm thấy câu hỏi này qua một tìm kiếm cho cùng một vấn đề. Mặc dù tôi nhìn xung quanh và đi đến kết luận rằng tôi không tin rằng err
nên là bất cứ điều gì nhưng một lỗi hoặc null
.
tốt nhất "có thẩm quyền" nguồn tôi đã tìm thấy là Nodejitsu của chủ đề trợ giúp:
http://docs.nodejitsu.com/articles/errors/what-are-the-error-conventions
Trong Node.js, nó được coi là tiêu chuẩn thực hiện để xử lý lỗi trong chức năng không đồng bộ bằng cách trả lại chúng như đối số đầu tiên cho hàm gọi lại của hàm hiện tại. Nếu có lỗi, thông số đầu tiên được chuyển qua đối tượng Lỗi với tất cả chi tiết. Nếu không, tham số đầu tiên là null.
Nhưng tôi nghĩ rằng bạn có thể sắp xếp làm cho một đối số từ trực giác là tại sao nó phải như vậy.Mặc dù có rất nhiều bài kiểm tra if (err)
trong mã để quyết định xem có lỗi gì hay không, nhưng bạn không nên vượt qua 0
hoặc false
hoặc undefined
hoặc NaN
hoặc chuỗi trống. Bạn sẽ có thể thử nghiệm với if (err == null)
nếu bạn muốn.
Chuyển lại nội dung nào đó trong trường lỗi không phải là rỗng nhưng không khớp với if (err instanceof Error)
có vẻ tinh tế. Vì vậy, tôi khuyên bạn không nên sử dụng mảng hoặc đối tượng. Nếu bạn đã làm, cũng lưu ý rằng không có lỗi nào trong mảng của bạn sẽ xác định vị trí mà lỗi tổng hợp đã được tạo. Đó là điểm mà "lỗi thực sự" xảy ra, bởi vì đó là thời điểm quyết định rằng các lỗi được đưa ra không phải là thứ mà nó có thể xử lý được.
Tuy nhiên, điều này có nghĩa là bạn sẽ cần phải làm việc nhiều hơn một chút để nhận được rằng:
function MultipleError (errs) {
// http://stackoverflow.com/a/13294728/211160
if (!(this instanceof MultipleError)) {
return new MultipleError(errs);
}
Error.call(this);
this.errs = errs;
// captureStackTrace is V8-only (so Node, Chrome)
// https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi
Error.captureStackTrace(this, MultipleError);
};
MultipleError.prototype.__proto__ = Error.prototype;
MultipleError.prototype.name = 'MultipleError';
MultipleError.prototype.toString = function() {
return 'MultipleError: [\n\t' + this.errs.join(',\n\t') + '\n]';
}
Một overkill chút, có lẽ. Nhưng nếu bạn thực sự không thể chọn lỗi để biểu diễn tập hợp và nghĩ rằng ai đó có thể quan tâm đến tập hợp các lỗi thay vì chỉ một, có vẻ như (?) Đó là điều bạn muốn làm ... cho phép người gọi để kiểm tra các mảng errs
nếu họ muốn.
+1 để lưu ý rằng lỗi có hiệu quả sẽ là 'Lỗi' – laconbass
Tôi đang giảm giá bạn cho *" Tôi nghĩ không có gì sai khi trả về một loạt lỗi "*, nhưng tặng bạn 100 điểm thưởng * (như không ai khác trả lời khi tôi thưởng cho nó để thu hút thêm sự chú ý vì vậy tôi không có ai khác để đưa ra các điểm) *. Có lẽ 98 điểm đạt được sẽ là một động cơ nhỏ để xem lại và suy nghĩ lại vấn đề: -P ... bởi vì tôi nghĩ rằng canon là một mảng các lỗi không phải là một tham số err hợp lệ trong Node. – HostileFork
@HostileFork thách thức được chấp nhận :) Cố định câu trả lời. – Raynos