ตรงกันข้ามกับคำตอบทั้งสองในความคิดเห็น - มีความแตกต่าง
ในขณะที่
Promise.resolve(x);
โดยพื้นฐานแล้วจะเหมือนกับ
new Promise(function(r){ r(x); });
มีความละเอียดอ่อน
โดยทั่วไปฟังก์ชันการส่งคืนสัญญาควรมีการรับประกันว่าไม่ควรโยนพร้อมกันเนื่องจากอาจโยนแบบอะซิงโครนัส เพื่อป้องกันผลลัพธ์ที่ไม่คาดคิดและสภาพการแข่งขัน - โดยปกติการขว้างจะถูกแปลงเป็นการปฏิเสธที่ส่งคืน
เมื่อคำนึงถึงสิ่งนี้ - เมื่อสร้างข้อมูลจำเพาะตัวสร้างสัญญาจะปลอดภัย
เกิดอะไรขึ้นถ้าsomeObject
เป็นundefined
?
- ทาง A ส่งคืนคำสัญญาที่ถูกปฏิเสธ
- ทาง B พ่นพร้อมกัน
Bluebird เห็นสิ่งนี้และ Petka ได้เพิ่มPromise.method
เพื่อแก้ไขปัญหานี้เพื่อให้คุณสามารถใช้ค่าส่งคืนได้ต่อไป ดังนั้นวิธีที่ถูกต้องและง่ายที่สุดในการเขียนสิ่งนี้ใน Bluebird นั้นไม่ได้เป็นเช่นนั้น - มันคือ:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method จะแปลงการโยนเป็นการปฏิเสธและส่งกลับไปแก้ไขให้คุณ เป็นวิธีที่ปลอดภัยที่สุดในการทำเช่นนี้และสามารถดูดซึมthen
ผ่านค่าที่ส่งคืนได้ดังนั้นจึงสามารถทำงานได้แม้ว่าsomeObject
จะเป็นคำสัญญาก็ตาม
โดยทั่วไปPromise.resolve
ใช้สำหรับการหล่อวัตถุและคำสัญญาต่างประเทศ (thenables) เพื่อสัญญา นั่นคือกรณีการใช้งาน
Promise.resolve
เป็นเพียงน้ำตาล