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