【发布时间】:2016-07-21 03:50:54
【问题描述】:
我想知道 js promises 在内部是如何工作的。
我用谷歌搜索过,但找不到答案(或者我不知道如何用谷歌搜索)。
我不知道它是如何回复你的。
假设我有这个客户端代码:
function whatever() {
doSomethingLocally;
callPromiseThatGoesAllOverTheWorldAndThenGetsBackToYou()
.then(
doSomethingLocallyAgain
);
doSomeOtherThingLocally;
}
我想知道,当承诺实现时,它如何回到代码中的正确点(即“doSomethingLocallyAgain”)。
【问题讨论】:
-
虽然规范describes how they behave,但它们实际上如何在内部工作 取决于规范实施者(即JavaScript 引擎)的职权范围。您问这个问题是否有根本原因,因为这可能是一个更好的问题?
-
我问这个是因为我不知道流程是如何回到那个确切点的。我不知道是否有一个套接字一直在用指针监听某些东西,所以当它收到响应时,它会将流更改到那个点。
-
doSomethingLocallyAgain必须是一个函数。您正在将该函数传递给 Promise,一旦完成,它就会简单地调用该函数。它没有什么神奇之处。这是回调如何工作的简化示例:function do(f) { setTimeout(() => { /* do some internal stuff */ f(); }, 3000); }; do(() => console.log('call me maybe'));。在这个例子中,do接受一个函数并在它准备好时调用它。 -
如果你对引擎内部(原生 ES6 实现)不是很感兴趣,你可能会对 Concept - Distilling how a promise works? 或 How is a promise/defer library implemented? 感兴趣
-
是的,这很有帮助,@Bergi。我还要补充一点:promisejs.org/implementing 我在想像你调用一个承诺,它会去一个 api 来获得你想要的结果,然后返回给你,我怎样才能让它与我的代码同步。
标签: javascript asynchronous es6-promise