2016-04-29 81 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

承诺只是一个幻想的返回值,您可以将回调附加到,而不是将它们传递给函数。添加好的不变性,即不会立即调用回调,而是始终放置一个微任务队列,这就是它。