Trái ngược với cả hai câu trả lời trong các bình luận - có sự khác biệt.
Trong khi
Promise.resolve(x);
về cơ bản giống như
new Promise(function(r){ r(x); });
có một sự tinh tế.
Các hàm trả về Promise thường phải có sự đảm bảo rằng chúng không được ném đồng bộ vì chúng có thể ném không đồng bộ. Để ngăn chặn các kết quả không mong muốn và các điều kiện của cuộc đua - các cú ném thường được chuyển đổi thành các lần từ chối trả về.
Với điều này trong tâm trí - khi thông số kỹ thuật được tạo, hàm tạo hứa sẽ được ném an toàn.
Nếu someObject
là undefined
gì?
- Cách A trả lại một lời hứa bị từ chối.
- Cách B ném đồng bộ.
Bluebird đã thấy điều này và Petka đã thêm Promise.method
để giải quyết vấn đề này để bạn có thể tiếp tục sử dụng các giá trị trả về. Vì vậy, cách chính xác và dễ dàng nhất để viết điều này trong Bluebird thực sự không phải - đó là:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method sẽ chuyển đổi các lần ném thành từ chối và quay lại giải quyết cho bạn. Đây là cách an toàn nhất để làm điều này và nó đồng hóathen
ables thông qua các giá trị trả về để nó hoạt động ngay cả khi someObject
thực tế là một lời hứa.
Nói chung, Promise.resolve
được sử dụng để đúc các đối tượng và các lời hứa ngoại (thenables) cho các lời hứa. Đó là trường hợp sử dụng của nó.
Promise.resolve
chỉ là đường.