2016-09-12 16 views
5

Próbuję owinąć głowę wokół obiektu obietnicy w javascript.So tutaj mam ten mały kawałek kodu.Mam obiekt obietnicy i dwa console.log() po obu stronach obiektu obietnicy. Myślałem, że to wydrukowaćzrozumienie obiektu obietnicy javascript

Hi

Nie

zami

ale drukowane

HI 

zami 

there 

dlaczego tak jest.i nie rozumieją, jak działa obietnica, ale rozumiem, jak działa asynchroniczne wywołanie zwrotne w javascript.Can ktoś rzucić trochę światła na ten temat?

console.log('hi'); 
var myPromise = new Promise(function (resolve, reject) { 
    if (true) { 
     resolve('There!'); 
    } else { 
     reject('Aww, didn\'t work.'); 
    } 
}); 

myPromise.then(function (result) { 
    // Resolve callback. 
    console.log(result); 
}, function (result) { 
    // Reject callback. 
    console.error(result); 
}); 
console.log('zami'); 

Odpowiedz

8

wykonanie obietnica jest asynchroniczny, co oznacza, że ​​jest on wykonany, ale program nie będzie czekać, aż skończy się kontynuować z resztą kodu.

Zasadniczo, kod jest w następujący sposób:

  1. Log 'Hi'
  2. Tworzenie obietnicę
  3. Execute obietnicy
  4. Protokół 'zami'
  5. obietnica jest rozwiązany i dzienniki 'Tam'.

Jeśli chcesz go wydrukować „Cześć, zami”, trzeba będzie

myPromise.then(function (result) { 
    // Resolve callback. 
    console.log(result); 
    console.log('zami'); 
}, function (result) { 
    // Reject callback. 
    console.error(result); 
}); 
+0

dzięki czemu jest asynchroniczny jak inne apisy internetowe, takie jak setTimeout, wywołanie ajax itp. Który kod wewnątrz obiektu pormise będzie asynchroniczny? –

+0

Tak, obietnice działają bardzo podobnie do setTimeout. Możesz składać obietnice z setTimeout, jak pokazano tutaj http://stackoverflow.com/questions/34255351/is-there-a-version-of-settimeout-that-returns-an-es6-promise –

+0

W niektórych przykładach widzę pisarzy napisał kod ajax wewnątrz obiektu obietnicy.AJAX jest domyślnie asynchroniczny. Dlaczego używać go w obietnicach? –

2

Nawet jeśli rozwiązany obiecał synchronicznie, przewodnicy ty wprost pod then sprawdzony sposób asynchroniczny. Jest to zgodnie z defined specification:

onFulfilled i onRejected wykonać asynchronicznie, po kolei pętli zdarzenie, w którym następnie jest nazywany, i ze świeżym stos

1

Jeśli chcesz dowiedzieć się również, jak to działa możesz go przeczytać here. Pokazuje przykład realizacji obietnicy, dzięki czemu można lepiej zrozumieć obiekt.

Powiązane problemy