当前位置: 首页 > 网络应用技术

承诺超级详细的来源解释

时间:2023-03-09 10:29:21 网络应用技术

  说到承诺,我相信每个人都经常用于日常发展。这是我们异步操作中必不可少的一部分,可以使代码看起来更好。

  我已经阅读了许多有关Promise在技术界的基本原则的文章。可能的原则可能理解,这次我准备了系统的分析以实现源代码并记录下来。这对您有帮助;

  有望实现库太多。下一个

  让我们想象承诺中最常见的使用方式,可能是这样

  第一个是新的Promise(),然后承诺必须是固定的构造函数,这是可以肯定的。

  承诺功能

  您会看到我们将FN和它传递给DoreLOVE执行,然后查看Doreolve;

  Doreve func

  您可以看到Doresolve非常简单,它直接调用我们的新承诺(FN)传递的FN,并传递了两个匿名函数以解决。拒绝被称为拒绝;

  执行FN,我们的SettieMout被称为1000ms之后的Resolve(“结果”);

  解决传递给FN是

  在这里完成的实际上是为了防止我们多次调用解决方案。它只是第一次生效;

  由于我们将分辨率异步调用,因此执行SettiMeout之后,然后将执行它。1000ms之后,决心将被调用

  由于我们仅在FN中调用解决方案,因此我们将直接查看解决方案

  解决功能

  解决主要是检查我们的newValue的类型。我们的新价值是“结果”,自然是字符串

  显然,我们示例中的分辨率类型将执行上述列表 - > 3,让我们看一下结局

  结局功能

  _ state是1,将执行结局代码

  ?嗯...延期循环弹力 - >处理func推动,并重新保留递延执行手柄func?

  在当时的弹药中,我们的调用方法似乎没有区别

  [去看func](#handle func)

  然后是弹性

  您可以看到那是Promon Prototype链上的一种方法

  noopnoop是一个空的函数,其中this.constructor在这里是object.constructor;

  也就是说,new Object.Constructor(函数NOOP(){});

  ?...迅速去控制台尝试;

  嗯...实际上,我们获得了包装参数并将其分配给PROM的函数

  手柄第一把手(这个新处理程序(fullfull,on Repect,prom));

  新处理程序(满足,拒绝,舞会)

  此功能很容易理解。新处理程序创建一个处理程序对象。这是处理程序;

  处理程序下面有三个属性。fullfull,否定是诺言的传递。

  然后是句柄(此处理程序)。

  处理功能

  如果是将其称为func的句柄函数,那么我们没有更改_state,即0,直接self._deferreds.push(延迟)。

  顺便说一句,我们当时的Func的一系列电话已经完成。1000ms之后,您将调用Resolve。

  如果它是从Resolve Func->大结局弹奏中调用的函数,那么_state和_value值得。在我们的示例中,_state是1,_value是'结果',它将执行

  Promise._IMDIANCEFN的参数将很快执行。让我们首先看一下内容,然后详细查看此内容

  根据_state判断,致电deferred.onfulfiled ||deferred.onrejectd,我们说_state有四个值。如果您忘记了,您可以回去看看。在此处执行的代码的值仅为1 ||2;

  递延打电话给我们,手柄实例化对象 - > handle->推入进入;

  to ret = cb(self._value);到目前为止,我们的整个新承诺(((解决,拒绝)=> {})。然后(()=> {})完成。确定调用我们的then then函数的两个函数

  回到立即

  嗯...啊..?Promise._ImMediateFN实际上是使用Settimeout执行的。因为即使将超时设置为0,Settimeout也会有一定的延迟,因此即使我们直接执行fn的Resolve func,订单也将晚于func。

  关注 - UP将宣布答案和原则

  console.log的顺序是什么?为什么?交叉点

  承诺的结果是什么。

  连续更新...

  原始:https://juejin.cn/post/709561977882340046