W przeciwieństwie do obu odpowiedzi w komentarzach - jest różnica.
Podczas
Promise.resolve(x);
jest w zasadzie taki sam jak
new Promise(function(r){ r(x); });
jest subtelność.
Funkcje zwracające obietnicę powinny generalnie mieć gwarancję, że nie powinny wyrzucać synchronicznie, ponieważ mogą wyrzucać asynchronicznie. Aby zapobiec nieoczekiwanym wynikom i warunkom wyścigu - rzuty są zwykle konwertowane na zwrócone odrzucenia.
Mając to na uwadze - kiedy specyfikacja została stworzona, obiecujący konstruktor jest bezpieczny.
A jeśli someObject
tak undefined
?
- Sposób A zwraca odrzuconą obietnicę.
- Droga B rzuca synchronicznie.
Bluebird zauważył to i Petka dodał, Promise.method
aby rozwiązać ten problem, abyś mógł nadal używać zwracanych wartości. Tak więc poprawny i najłatwiejszy sposób zapisania tego w Bluebird to w rzeczywistości żadne z nich - to jest:
var someFunction = Promise.method(function someFunction(someObject){
someObject.resolved = true;
return someObject;
});
Promise.method zamieni rzuty na odrzucenia i wróci do rozstrzygnięć za Ciebie. Jest to najbardziej bezpieczny sposób, aby to zrobić, i asymiluje then
ables poprzez zwracane wartości, więc zadziała, nawet jeśli someObject
jest w rzeczywistości obietnicą.
Ogólnie Promise.resolve
jest używany do odlewania przedmiotów i obcych obietnic (dóbr) na obietnice. To jest jego przypadek użycia.
Promise.resolve
to tylko cukier.