Tôi hy vọng có thể tùy chỉnh các đối tượng lỗi được truyền cho máy khách nếu ngoại lệ xảy ra trên máy chủ.Xử lý ngoại lệ trên máy chủ, tùy chỉnh đối số không thành công trên máy khách
Tôi đang sử dụng 'rồi' chức năng trên máy khách để xử lý thành công và thất bại:
hub.server.login(username, password).then(function(result) {
// use 'result'
}, function(error) {
// use 'error'
});
Nếu đăng nhập thành công, 'kết quả' là giá trị trả về của phương pháp đăng nhập trên máy chủ. Nếu đăng nhập thất bại, tôi ném một ngoại lệ của 'CustomException'. Đây là ngoại lệ với thuộc tính 'Mã'.
if (!IsValidLogin(username, password))
throw new CustomException { Code: "BADLOGIN", Message: "Invalid login details" };
Nếu tôi có ngoại lệ chi tiết được bật, đối số 'lỗi' trên máy khách là 'Chi tiết đăng nhập không hợp lệ' - thuộc tính Message của ngoại lệ.
Có cách nào tôi có thể thay đổi có chọn lọc kết quả lỗi từ chuỗi thành đối tượng phức tạp không? tức là nếu 'CustomException' được ném trong phương thức trung tâm, trả về đối tượng {Code: [...], Message: [...]} cho trình xử lý lỗi phía máy khách?
này phải chứng minh những gì tôi muốn xem trên máy khách:
hub.server.login(username, password).then(function(userInfo) {
alert("Hello " + userInfo.Name);
}, function(err) {
if (err.Code === "BADLOGIN.USERNAME")
alert("Unrecognised user name");
else if (err.Code === "BADLOGIN.PASSWORD");
alert("Invalid password");
else
alert("Unknown error: " + err.Message);
});
(Lưu ý 'Mã' và 'Thư' tài sản trên 'err').
Tại sao bạn không chỉ trả về một đối tượng tùy chỉnh thay vì ném một lỗi? –
Nó sẽ không được sạch sẽ. Tôi nghĩ rằng tôi biết những gì bạn có nghĩa là, một số loại đối tượng trở lại có một 'Kết quả' và một 'Lỗi' tài sản - một trong số đó sẽ được thiết lập, một trong số đó sẽ là null. Tôi đã sử dụng này trước đây, nhưng tôi chỉ tự hỏi nếu một ngoại lệ có thể được tốt hơn cho hơn tôi có thể có sự thành công và đăng nhập thất bại tự động tách biệt trên máy khách do bản chất của callback 'sau đó'. – Barguast
tức là .then (hàm (kết quả) {if (result.error) {// failed} else {// success}}); Nó sẽ hoạt động, nhưng nó không theo mô hình hứa hẹn thông thường có một nhánh thành công và thất bại riêng biệt. – Barguast