Mam taki kod javascript:
function justTesting() {
promise.then(function(output) {
return output + 1;
});
}
var test = justTesting();
Zawsze mam niezdefiniowaną wartość testu var. Myślę, że dzieje się tak, ponieważ obietnice nie zostały jeszcze rozwiązane… czy istnieje sposób na zwrócenie wartości z obietnicy?
javascript
promise
Priscy
źródło
źródło
then()
połączenia jest ponownie obietnicą, która opakowuje zwróconą wartość.promise
. Nie pokazujesz go nigdzie zdefiniowanego i nie zwracasz niczego ze swojejjustTesting()
funkcji. Jeśli potrzebujesz lepszej pomocy, musisz opisać problem, który próbujesz rozwiązać, zamiast po prostu pokazywać nam kod, który jest tak „wyłączony”, że nawet nie ilustruje tego, co naprawdę próbujesz zrobić. Wyjaśnij problem, który próbujesz rozwiązać.Odpowiedzi:
Kiedy zwracasz coś z połączenia
then()
zwrotnego, jest to trochę magiczne. Jeśli zwrócisz wartość, następnathen()
jest wywoływana z tą wartością. Jeśli jednak zwrócisz coś podobnego do obietnicy, następnythen()
czeka na to i jest wywoływany tylko wtedy, gdy ta obietnica się spełni (powiedzie się / zawiedzie).Źródło: https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing-asynchronous-actions
źródło
Aby użyć obietnicy, musisz albo wywołać funkcję, która tworzy obietnicę, albo musisz utworzyć ją samodzielnie. Tak naprawdę nie opisujesz, jaki problem naprawdę próbujesz rozwiązać, ale oto jak sam stworzyłbyś obietnicę:
Lub, jeśli masz już funkcję zwracającą obietnicę, możesz użyć tej funkcji i zwrócić jej obietnicę:
źródło
return
, czylijustTesting
mówireturn.then => return
. Wiem, że to działa, bo zaimplementowałem to (bcs linting zmusił mnie do odejścianew Promise
), ale czy możesz wyjaśnić, jak rozumieć / myśleć o tej parze powrót / powrót?.then()
jest funkcją oddzielną od funkcji zawierającej, więc po jej wywołaniu ma swoją własną wartość zwracaną. Po drugie, wartość zwracana przez program.then()
obsługi staje się ustaloną wartością obietnicy. Czyli.then(val => {return 2*val;})
zmienia rozwiązywaną wartość zval
na2*val
.Zrobiłem tutaj to, że zwróciłem obietnicę z funkcji justTesting. Następnie możesz uzyskać wynik, gdy funkcja zostanie rozwiązana.
Mam nadzieję że to pomoże!
źródło
Wolę używać polecenia „await” i funkcji asynchronicznych, aby pozbyć się niejasności obietnic,
W tym przypadku najpierw napisałbym funkcję asynchroniczną, która zostanie użyta zamiast funkcji anonimowej o nazwie „obietnica.Następnie” część tego pytania:
a potem nazwałbym tę funkcję z funkcji głównej:
Zauważając, że zwróciłem tutaj zarówno funkcję główną, jak i podrzędną do funkcji asynchronicznych.
źródło