Promise是一种解决异步编程的解决方案,比传统解决方案更合理,更强大 - 反驳功能和事件 - 更合理,更强。它首先是由社区提出和实施的。ES6将其写入语言标准,统一用法以及本地提供的承诺对象。承诺对象具有两个特征,并且(1)对象的状态不受外部世界的影响。Promise对象代表了一个异步操作,并具有与三个国家:待处理,实现(成功)和拒绝。(2)一旦国家改变,它将不再改变,并且可以在任何时候获得该结果。从待定到实现,从待定到拒绝。以下是列出的几个承诺的API,它也是我们实际开发中应用频率最高的API。
该方法是承诺实例的方法。它的作用是添加恢复功能时,将状态更改添加到承诺实例中。当时方法的第一个参数是状态的恢复函数。选定。然后,方法返回一个新的承诺实例(请注意,它不是原始承诺实例)。因此,您可以使用链写作,也就是说稍后调用另一种方法。
````
````
指定将执行的操作的方法,无论承诺对象的最终状态如何,这意味着状态是否已满还是被拒绝,必须执行。最终方法的恢复功能不接受任何参数,这意味着没有办法知道先前的承诺状态是否实现或拒绝。这表明最终方法中的操作应与国家无关,并且不依赖于承诺的执行结果。
````
````
最后,最典型的应用程序场景是加载我们的AJAX请求。通过此功能,我们无需在AJAX请求成功或失败中写入加载= false。
Promise.all()方法用于打包多个承诺实例并将其包装到一个新的承诺实例中。
````
````
Promise.All的状态由P1,P2,P3确定,并分为两种情况。
(1)只有当P1,P2和P3的状态都实现时,所有人的诺言才能实现。在此时间紧随其后。
(2)只要在P1,P2和P3中拒绝,承诺的状态就会被排斥。目前,拒绝的第一个实例的返回值将被传输到Promise.last。
````
`这里有一个预防措施:如果该实例的cach捕获,则从P2丢出的错误,则不会执行所有捕获量,也不会执行满足状态的状态结果,而是P2的返回值在这里会更改。未定义,请查看以下案例
````
`在上面的情况下,P3是一个普通对象,一般对象中的数据被传递到Promise中的数据中。所有数组,Promise将作为承诺满足状态的后值处理。
有时,应对对象需要现有的对象,而Promise.resolve()方法扮演此角色。在上述情况下,在我们上面的P3过程中,在内部转换机制中,这实际上是称为承诺的参数。Resolve()方法分为四种情况。
````
````
现在,互联网上有许多教程和案例,关于手写承诺。他们值得学习。在我们的工作面试过程中,手写的承诺也经常遇到访谈问题,因此有必要学习和掌握这些东西。在这里,我们分享了学习过程。您没有这样的手写案例。它是什么?在线查找案例。如果您再次复制它,则有一个概念。如果您将其复制两次,则可以理解。如果您复制三次并学习人们的想法,那么在这种情况下,无论是否掌握和学习取决于您自己。在下面,我们开始实现自己的神秘主义。
````
````
````
`我们的神秘主义者,意识到这一步骤,实际上,基本形式已经出现,但是上面的代码仍然是一个问题。
问题1:我们的错误不知道被捕获;
问题2:我们当时的方法是微任务的异步函数。现在,我们只是一个普通的同步函数。
问题3:我们当时的方法可以在异步返回的续订中调用,然后电流只能执行同步函数链呼叫。
接下来,我们将以步骤解决这些问题:我们的JS中有什么问题,在哪里,也不是,该安排已打开:更改在于构造函数中的代码块中,请采取包裹:
````
`第二个问题是我们当时的方法是微任务的异步函数,然后我们添加异步。第三个问题是MyPromise会收到异步收益结果。我们将一起处理:
````
````
为此,我们的mypromise方法已经完成。您可以在浏览器中尝试输出打印。这不是示威。这是继续添加一种方法。
该方法是Promise中的静态方法。静态方法是通过承诺本身调用的。没有例子。请注意,当前的ES6支持静态方法。所有方法的功能是接收数组参数。参数阵列是承诺实例的集合。所有方法还返回一个新的承诺实例。实例状态是满足的值。注意:全方法返回的承诺即时值与数组参数的序列一致:
````
`上述方法是由所有方法实现的代码。在此步骤中,我们主要实现MyPromise类,然后使用两种重要的方法和所有方法。其他任何承诺方法都不会重复。您可以自己观察此方法的功能,并查看如何实施它们。Today的承诺分析共享在这里。本文重点介绍了Ruan Yifeng Giant的Ecmascript6的进入
原始:https://juejin.cn/post/7099746789766463518