ฉันได้อ่านบทความหลายเรื่องในหัวข้อนี้ แต่ก็ยังไม่ชัดเจนสำหรับฉันหากมีข้อแตกต่างระหว่างPromise.reject
กับการส่งข้อผิดพลาด ตัวอย่างเช่น,
ใช้ Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
โดยใช้การโยน
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
การตั้งค่าของฉันคือการใช้throw
เพียงเพราะมันสั้นกว่า แต่ก็สงสัยว่ามีข้อได้เปรียบของอีกคนหนึ่ง
throw
คือมันจะไม่ส่งผลให้เกิดสัญญาที่ถูกปฏิเสธถ้ามันถูกส่งออกมาจากภายในการโทรกลับแบบอะซิงโครนัสเช่น setTimeout jsfiddle.net/m07van33 @ Blondie คำตอบของคุณถูกต้อง
reject
มันจากรายการพารามิเตอร์ของฉัน
.then()
จัดการจับยกเว้นโยนและเปลี่ยนมันเป็นสัญญาปฏิเสธโดยอัตโนมัติ เนื่องจากฉันได้อ่านว่าข้อยกเว้นที่ส่งออกมานั้นไม่ได้ดำเนินการอย่างรวดเร็วโดยเฉพาะฉันเดาว่าการส่งคืนสัญญาที่ถูกปฏิเสธอาจจะเร็วกว่าในการดำเนินการเล็กน้อย แต่คุณต้องทำการทดสอบในเบราว์เซอร์สมัยใหม่หลาย ๆ ตัว ฉันใช้เป็นการส่วนตัวthrow
เพราะฉันชอบความสามารถในการอ่าน