首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时检查ES6 promise fulfillment处理程序表?

何时检查ES6 promise fulfillment处理程序表?
EN

Stack Overflow用户
提问于 2019-12-25 17:18:09
回答 1查看 43关注 0票数 1

下面的resolve()函数和then()函数是否真的是ES6 Promise机制中查看实现处理程序并将其添加到作业队列中的唯一函数(并将它们标记为已添加且不再添加)?

代码语言:javascript
复制
let promise = new Promise(function(resolve, reject) {
    console.log("resolve, reject are", resolve, reject);
    setTimeout(function() {
      resolve("this is the success data");
    }, 1000);
});

promise.then(
  function(a) { 
    console.log("Success.", a); 
    promise.then(function(a) { console.log("Go have a drink.", a); });
  },
  function(a) { 
    console.log("failure", a) 
  }
);

上面代码的另一种选择是,不在setTimeout()中直接执行resolve()then(fn)是否会将fn添加到该promise的实现处理程序表(而不是作业队列),或者如果promise已经解析,则直接将fn添加到作业队列,并将fn标记为“已添加到作业队列”,不需要重新添加?

另一方面,resolve()是JS ES6提供的函数,它将一个promise标记为"resolved“(状态),并检查此promise的履行处理程序表是否为空。如果存在这样的处理程序(并且之前不应该标记为已添加到作业队列中),则将这些处理程序添加到作业队列中,并标记为已添加。

在任何情况下,假设有fn1fn2fn3,...等在实现处理程序表中,每个resolvedValue都作为fn1(resolvedValue)添加到作业队列中,其中resolvedValueresolve(resolveValue)调用在内部记住?

并且根本不存在访问实现处理程序表的其他情况。作业队列作业由JS事件循环执行,因此当所有图形用户界面“单击事件处理程序”等完成后,作业队列中的实现(和拒绝)处理程序将被执行,然后setTimeout和setInterval处理程序也将被执行?这是实现处理程序表和作业队列的工作方式吗?

EN

回答 1

Stack Overflow用户

发布于 2019-12-25 18:11:01

下面的resolve()函数和then()函数是ES6 Promise机制中查看实现处理程序并将其添加到作业队列的唯一函数,这是真的吗?

是。(reject还查看该表并删除处理程序,而不将其添加到作业队列中)。

then(fn)是否会将fn添加到此promise的实现处理程序表(而不是作业队列),或者如果promise已经解析,则直接将fn添加到作业队列?

是。

且该fn被标记为“已添加到作业队列”,不需要重新添加?

不,fn根本没有标记。它可能会被多次传递给then,在这种情况下,它将需要多次运行。

但是,是的,当promise实现并调度回调作业时,实现处理程序表将被清除。

在任何情况下,假设有fn1fn2fn3,...等在实现处理程序表中,每个resolvedValue都作为fn1(resolvedValue)添加到作业队列中,其中resolvedValueresolve(resolveValue)调用在内部记住?

是。虽然从技术上讲是resolve does not always fulfill the promise

,并且根本不存在访问实现处理程序表的其他情况。

是。我想知道你为什么这么在意。

点击作业队列作业是由JS事件循环执行的,所以当所有的图形用户界面“点击事件处理程序”等完成后,作业队列中的实现(和拒绝)处理程序就会被执行,然后setTimeout和setInterval处理程序也会被执行?这是实现处理程序表和作业队列的工作方式吗?

是。但是,请注意click handlers, setTimeout and setInterval have a separate event queue from promise jobs

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59476887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档