На відміну від обох відповідей у коментарях - різниця є.
Поки
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
використовується для відливання предметів та іноземних обіцянок (тенабле) до обіцянок. Це його варіант використання.
Promise.resolve
це просто цукор.