2015-12-04 11 views
23

Mam kodu javascript tak:Powrót z obietnicą następnie()

function justTesting() { 
    promise.then(function(output) { 
    return output + 1; 
    }); 
} 

var test = justTesting(); 

ja zawsze dostaje niezdefiniowanej wartości dla testu var. Myślę, że to dlatego, że obietnice nie zostały rozwiązane .. czy istnieje sposób na zwrot wartości z obietnic?

Dzięki!

+1

Wartość zwracana wywołania 'then()' jest ponownie obietnicą, która zawija wartość zwróconą przez użytkownika. – Sirko

+0

Masz błąd składni, nie sądzę, że to nawet analizuje. – djechlin

+0

test jest niezdefiniowany, ponieważ justTest nie zwraca nic w twoim przykładzie (nie masz zwrotu). Dodaj zwrot, a test zostanie zdefiniowany jako obietnica. –

Odpowiedz

21

Aby skorzystać z obietnicy, musisz zadzwonić do funkcji, która tworzy obietnicę, lub musisz ją utworzyć samodzielnie. Tak naprawdę nie opisać problem, jesteś naprawdę stara się rozwiązać, ale oto w jaki sposób stworzyć obietnicę siebie:

function justTesting(input) { 
 
    return new Promise(function(resolve, reject) { 
 
     // some async operation here 
 
     setTimeout(function() { 
 
      // resolve the promise with some value 
 
      resolve(input + 10); 
 
     }, 500); 
 
    }); 
 
} 
 

 
justTesting(29).then(function(val) { 
 
    // you access the value from the promise here 
 
    log(val); 
 
}); 
 

 
// display output in snippet 
 
function log(x) { 
 
    document.write(x); 
 
}

Albo, jeśli już mają funkcję, która zwraca obietnica, można użyć tej funkcji i zwraca jego obietnicę:

// function that returns a promise 
 
function delay(t) { 
 
    return new Promise(function(resolve) { 
 
    setTimeout(function() { 
 
     resolve(); 
 
    }, t); 
 
    }); 
 
} 
 

 
function justTesting(input) { 
 
    return delay(100).then(function() { 
 
    return input + 10; 
 
    }); 
 
} 
 

 
justTesting(29).then(function(val) { 
 
    // you access the value from the promise here 
 
    log(val); 
 
}); 
 

 
// display output in snippet 
 
function log(x) { 
 
    document.write(x); 
 
}

20

Po zwróceniu czegoś z wywołania zwrotnego then() jest to trochę magiczne. Jeśli zwrócisz wartość, wywoływana jest następna funkcja then() z tą wartością. Jeśli jednak zwrócisz coś obiecującego, następny() czeka na nie i jest wywoływany tylko wtedy, gdy ta obietnica ustali się (powodzenie/niepowodzenie).

poprzez https://developers.google.com/web/fundamentals/getting-started/primers/promises#queuing_asynchronous_actions

+2

To było bardzo przydatne, dzięki. – Hamsterrific

2

Co mam zrobić tutaj jest to, że wróciłem obietnicę z funkcji justTesting. Możesz wtedy uzyskać wynik, gdy funkcja zostanie rozwiązana.

function justTesting() { 
    return promise.then(function(output) { 
    return output + 1; 
    }); 
} 

justTesting().then((res) => { 
    var test = res; 
    // do something with the output :) 
    } 

Mam nadzieję, że to pomoże!

+0

Co by się stało, gdyby w "// coś z wyjściem" wstawiłem instrukcję return? Na przykład: Będę miał "JustTesting(). Then then" w ramach funkcji nadrzędnej. Czy będę w stanie zwrócić wartość w części "wtedy"? – mrzepka

+0

Jeśli chcesz zwrócić wartość z // wykonaj coś z wyjściem, będziesz musiał dodać return przed justTesing(). Przykład: "return justTesting(). Then then ((res) => {return res;}); –

+0

Dobra, właśnie tego się spodziewałem, chciałem się tylko upewnić :) Dzięki! – mrzepka

Powiązane problemy