手机版

异步编程规范详细介绍Javascript中的Promises/A

时间:2021-11-07 来源:互联网 编辑:宝哥软件园 浏览:

Javascript中的异步编程逐渐被大家接受。以前人们一般通过回调嵌套、setTimeout、setInterval等来实现。代码看起来非常直观,不看整个代码逻辑很难快速理解。Javascript中的异步函数包括I/O函数(Ajax、postMessage、img加载、脚本加载等)。),定时功能(setTimeout、setInterval等)。).这些我们都很熟悉。在复杂的应用中,我们经常会嵌套多层,甚至认为有些步骤没有完成,导致程序异常。最简单的例子:如果你把节点注入到DOM中,你必须等待节点被注入,然后操作节点。当注入大量节点时,时间往往难以把握。如果我们的代码依赖于第三方api的数据。我们无法知道API响应的延迟时间,应用程序的其他部分可能会被阻塞,直到它返回结果。Promises为这个问题提供了一个更好的解决方案,它是非阻塞的,并且与代码完全解耦。然后,让我看一下Javascript中的异步编程。首先,我推荐大家看看相对流行的Promises/A规范。承诺/规范注:为便于理解,描述可能与承诺/规范不同;CommonJS的Promises/A规范通过标准化API接口简化了异步编程,使我们的异步逻辑代码更容易理解。遵循Promises/A规范的实现称为Promise对象,它只有三种状态:未实现、已实现和失败;初始创建时处于未完成状态,状态只能由未完成变为已完成,或未完成变为失败。一旦状态变为“已完成”或“已履行”,就不能更改状态。承诺/规范提供了描述程序中延迟(或未来)概念的解决方案。主要思想不是执行一个方法,然后阻止应用程序在调用其他方法之前等待结果返回,而是返回一个Promise对象来满足未来的监控。可以监控已完成状态和失败状态。Promise通过实现一个then接口来注册回调,以返回Promise对象:复制代码如下: then(履行处理程序、错误处理程序、进度处理程序);然后接口被用来监控一个承诺的不同状态。FulfilledHandler用于监控已完成状态,errorHandler用于监控失败状态,progressHandler用于监控未完成状态。Promise不强制未实现的事件监控(例如,我们知道jQuery旧版本(1.5,1.6)的delivered是Promise的一个实现,但是它不监控未实现的状态来回调progressHandler)。一般来说,然后接口返回一个新的Promise对象,而不是原来的Promise对象。这个新的Promise对象可以理解为原始Promise对象的视图,它只包含原始Promise对象的一组方法。这些方法只能观察原始Promise对象的状态,但不能改变延迟对象的内部状态。这样可以避免多个调用者之间的冲突,并且多个调用者可以在不影响其他调用者的情况下更改新Promise对象的状态。此外,Promise提供了两种接口实现状态转换:resolve(实现状态从未完成到完成)和reject(实现状态从未完成到被拒绝或失败)。发图帮助理解:

有了Promise,就可以用同步思维写异步逻辑了。在异步函数中,不能使用try/catch来捕获异常或抛出异常。有了Promise,我们可以直接显式定义errorHandler,相当于捕捉异常。下面是几个遵循Promises/A规范的类库,比如when、q、rsvp.js、jQuery。延期等等。

版权声明:异步编程规范详细介绍Javascript中的Promises/A是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。