Вопреки обоим ответам в комментариях - разница есть.
Пока
Promise.resolve(x);
в основном то же самое, что
new Promise(function(r){ r(x); });
есть тонкость.
Функции, возвращающие обещание, обычно должны иметь гарантию того, что они не должны вызывать синхронно, поскольку они могут вызывать асинхронно. Чтобы предотвратить неожиданные результаты и условия гонки - броски обычно конвертируются в возвращенные отклонения.
Имея это в виду - когда спецификация была создана, конструктор обещаний безопасен.
Что если someObject
есть undefined
?
- Способ А возвращает отклоненное обещание.
- Путь Б бросает синхронно.
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
это просто сахар.