Promise.resolve
utworzy nową Obietnicę rozwiązaną z wartością, którą do niej podasz. Tak więc w twoim przypadku twoja obietnica jest faktycznie rozwiązana za pomocą obiektu funkcji. Oznacza to, że program obsługi then
jest przekazywany do obiektu funkcji.
Co należy zrobić jest
new Promise((resolve, reject) => resolve('John'))
.then(args => {
console.log(args);
throw new Error('ops')
})
.catch(console.log.bind(console));
Teraz tworzysz Promise
obiekt i masz rozwiązanie, że przy wartości John
.
Jeśli chcesz obietnicy zostać rozwiązane o wartości łatwo, to nie przekazać obiekt funkcyjny ale przekazać wartość rzeczywistą sama do Promise.resolve
funkcji.
Promise.resolve('John')
.then(args => {
console.log(args);
throw new Error('ops')
})
.catch(console.log.bind(console));
Teraz masz obietnicę rozwiązany z wartością John
i obsługi then
dostanie rozwiązany wartość John
.
Uwaga: Jest to zalecany sposób tworzenia obietnicę, gdy wiesz, rzeczywisty sposób rozwiązywać z łatwością, dzięki czemu można uniknąć Promise constructor anti-pattern.
Myślę, że wyjście powinno być john, ale zamiast tego jest to "[funkcja]' - 'console.log (() => 'john'))' - zobacz co tam zrobiłem? –
'console.log (args());' wypisze * john * – cgTag