Ответ 1
В отличие от обоих ответов в комментариях - есть разница.
Пока Promise.resolve(x);
в основном то же самое, что new Promise(function(r){ r(x); });
есть тонкость.
Функции возврата обещаний обычно должны иметь гарантию, что они не должны бросать синхронно, так как они могут асинхронно бросать. Чтобы предотвратить неожиданные результаты и условия гонки - броски обычно преобразуются в возвращенные отклонения.
С учетом этого - когда спецификация была создана, конструктор обещаний безопасен для броска.
Что делать, если someObject
- undefined
?
- Путь A возвращает отклоненное обещание.
- Путь B бросается синхронно.
Синяя птица увидела это, и Петка добавил Promise.method
, чтобы решить эту проблему, чтобы вы могли продолжать использовать возвращаемые значения. Таким образом, правильный и самый простой способ написать это в Bluebird на самом деле не так - это:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method преобразует броски в отклонения и возвращается к разрешению для вас. Это самый безопасный способ бросить вызов, и он ассимилирует then
ables через возвращаемые значения, чтобы он работал, даже если someObject
на самом деле является обещанием.
В общем случае Promise.resolve
используется для приведения объектов и внешних promises (thenables) в promises. Это его прецедент.