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

实施承诺源代码

时间:2023-03-06 01:53:58 网络应用技术

  我们使用班级实施承诺

  第四版的“ JavaScript高级程序设计”如下所述,如下所述:主题(即承诺)是无效的替代品。

  将参考数据类型添加到ES6,并由关键字实例化。它需要将其传递到执行函数中作为参数(必须传递,否则将是错误的)。

  因此,在这里,我们首先定义一个课程:

  它有两个功能:

  无论是值还是原因,它都包含原始值或对象的非修改引用。两个是可选的,默认值是

  它是一个具有状态的对象,共有三个状态:

  这三个状态之间的关系是:

  这两个定居点都是不可逆转的。

  国家是私人的,不能直接通过JS检测到。

  这里的状态如下:

  由于状态是私有的,因此只能在内部进行操作。它将在执行人函数中完成。执行器函数的两个职责:

  需要知道的是执行器函数是同时执行的,因为执行程序函数本身是初始化程序

  ??注意:

  这里的箭头功能的含义不是为了简单,而是要指出问题。

  这里只有几种常用的方法

  Promise.Srolve不得在状态的开始,然后调用执行人函数更改最终状态。它可以调用其静态方法由已完成的静态方法实例化。

  够?注意:此方法可以包装任何非启示值,包括错误的对象,并将其转换为已完成的承诺

  Promise。拒绝与先前的方法相似,该方法将实例化拒绝并丢弃异步错误。捕获不能捕获此错误,只能捕获它。

  Promise.All主要在设置完成后返回一个实例,结果是收集所有恢复结果(按迭代器的顺序)。

  在MDN上,我们可以知道,此方法的返回值需要遵循以下三点:

  它不会影响最终的最终作用,其他行动将被默默地处理

  Promis.race方法返回包装,这是在集合中解决或失败的第一个镜像。它需要遵循以下两个点:

  我们熟悉安装的原型对象。我们一一看它们。

  然后可以说是处理程序的主要方法,收到两个参数:

  请注意,这两个参数都是可选的。静音将忽略传递给该函数的任何非函数类型参数(也就是说,它将返回失败的值或原因,毕竟是处理数据)。您只想提供一个参数,然后需要将其上传到OR中。这有助于避免在内存中创建额外的对象。

  实际上可以看到上面的代码块:只有其中一个将被执行。

  需要注意的一个重要点是该方法将返回一个新示例。

  然后返回新的承诺实例也是一种规范。因此,我们可以使用链电话。

  暂时,我们暂时称其为原始,规格的定义,无论是或(返回值),都会执行承诺的解决方案:只有当两者被扔掉时,才会被拒绝。

  那么如何在这里实现承诺解决方案?

  完成后,我们使用异步部分。

  捕获方法用于添加拒绝过程。它实际上是语法糖,称其等于调用。换句话说:

  因此,最终实施:

  最终方法用于添加当此处理程序转换为完成或拒绝时执行的处理程序。

  但是,它无法知道承诺状态是完成还是拒绝,因此该方法主要用于添加清洁代码。

  该方法被设计为与状态无关的方法,因此它通常返回其原始层。因此,该方法不接受任何参数。

  可以看出,我们没有在实施此方法的过程中判断当前状态。此时,如果返回或丢弃处理程序(抛出或返回一个),它将返回相应的。

  这个场景并不常见,因为只要解决了,新的场景仍然会返回初始

  到目前为止,直到现在我们只有同步,并且没有异步部分,但实际上,本机方法中的函数参数将包裹在异步操作中。

  添加异步的原因也很明确,以确保新返回已经处于发电状态

  实际上在规范(2.2.4)::中提到了这一点。

  当执行环境堆栈包含平台代码时,必须调用它。

  这里的平台代码是指引擎,环境和承诺的实现代码。它必须确保这两种方法在调用时是异步的,并且在称为事件的事件之后,应在新的执行堆栈中执行。

  此事件队列可以采用宏观任务机制,例如或或要实现的微任务机制,例如OR。

  我们在这里使用它

  要注意的另一件事是,当国家处于国家时,我们在这里没有计划,因此应在此处添加国家的处理:

  结合组合中提到的方法以达到最终效果(请注意,如果抛出异常,则必须拒绝执行,因此您需要使用它来完成此部分):

  由于事件周期机制的存在:宏任务和micro -tasks.s.和我们的承诺中,不同的异步任务分为两类。

  那么如何执行宏任务和微任务?

  如果当前的执行堆栈是在同步任务中执行的,则主线程将首先检查Micro -Mission队列。如果队列中有任务,则将在排除队列之前执行队列中的任务。如果不存在,您将检查宏任务队列,将事件添加到当前的执行堆栈中。

  为了测试我们自己是否符合规范,我们需要使用官方的测试工具进行测试。此外,需要实施静态方法,否则测试将无法运行。

  延期

  安装测试工具

  然后在项目目录中执行测试。当然,我们还可以将命令直接配置为中间。

  跑步:

  这样,测试运行。

  诺言的方法而不是书写,让我们稍后再谈谈

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