Tôi đã đọc một số bài viết về chủ đề này, nhưng vẫn chưa rõ ràng nếu có sự khác biệt giữa Promise.reject
so với ném lỗi. Ví dụ,
Sử dụng Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
Sử dụng ném
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
Sở thích của tôi là sử dụng throw
đơn giản vì nó ngắn hơn, nhưng tự hỏi liệu có bất kỳ lợi thế nào so với cái kia không.
throw
là nó sẽ không dẫn đến một lời hứa bị từ chối nếu nó bị ném từ trong một cuộc gọi lại không đồng bộ, chẳng hạn như setTimeout. jsfiddle.net/m07van33 @Blondie câu trả lời của bạn đã đúng.
reject
nó khỏi danh sách param của tôi.
.then()
xử lý nắm bắt ngoại lệ ném và tự động biến nó thành một lời hứa bị từ chối. Vì tôi đã đọc rằng các ngoại lệ bị ném không đặc biệt nhanh để thực thi, tôi đoán rằng việc trả lại lời hứa bị từ chối có thể nhanh hơn một chút để thực hiện, nhưng bạn phải đưa ra một thử nghiệm trong nhiều trình duyệt hiện đại nếu điều đó quan trọng cần biết. Cá nhân tôi sử dụngthrow
vì tôi thích sự dễ đọc.