2016-04-29 86 views
0

我想知道js承諾如何在內部工作。JS Promises如何在內部工作?

我google了,但我找不到答案(或者我不知道如何谷歌)。

我不知道它是如何回到你身邊的。

比方說我有這樣的客戶端代碼:

function whatever() { 
    doSomethingLocally; 

    callPromiseThatGoesAllOverTheWorldAndThenGetsBackToYou() 
     .then(
      doSomethingLocallyAgain 
     ); 

    doSomeOtherThingLocally; 
} 

我想知道怎麼回事,許被滿足時,它就會回到正確的點代碼(即「doSomethingLocallyAgain」)。

+0

儘管規範[描述他們如何_](http://www.ecma-international.org/ecma-262/6.0/#sec-promise-objects),他們實際上在內部是如何工作的規範的實現者(即JavaScript引擎)。是否有一個你問這個問題的根本原因,或許這可能是一個更好的問題? –

+0

我在問這個,因爲我不知道流程是如何回到那一點。 我不知道是否有一個套接字一直在用指針監聽某個東西,所以當它接收到響應時,它會將流程改變爲該點。 –

+0

'doSomethingLocallyAgain'必須是一個函數。您正在將該函數傳遞給promise,並在完成後簡單地調用該函數。沒有什麼神奇的。這裏是回調函數的簡化示例:'function do(f){setTimeout(()=> {/ *做一些內部的東西*/f();},3000); }; (()=> console.log('call me maybe'));'。在這個例子中,'do'接受一個函數並在準備就緒時調用它。 –

回答

2

承諾只是一個幻想的返回值,您可以將回調附加到,而不是將它們傳遞給函數。添加好的不變性,即不會立即調用回調,而是始終放置一個微任務隊列,這就是它。