Promise在Scratch自定义积木块中的应用

很多成熟的编程语言都有关于并发的API,JavaScript只有一个线程,如果没有并发操作会直接卡死,为了达到无阻塞高并发js诞生很多方法,开发中实现异步使用最多的就是回调函数。

在日常界面开发过程,为咯防止卡顿用户等待,一般都会使用异步操作。但是也会遇到以下这种情况:

根据界面组件需求需要多个异步操作,而且这些异步操作有依赖关系,解决这种情况最简单的方式就是回调函数的嵌套。这种方式能够解决问题,但是代码结构混乱,难以维护。

NodeJS作为JavaScript的后台编程语言必须具备成熟无阻塞高并发的功能才能处理复杂的业务逻辑。目前实现异步有以下5种:
  • 回调函数
  • 事件监听
  • 发布/订阅
  • Promise对象
  • async函数

在图形化编程工具Scratch二次开发的过程中需要将异步操作队列化。在这个过程中使用到咯Promise对象,对于Promise有了更深的理解。

Promise对象

Promise对象用来传递异步操作的消息,它代表了某个未来才会知道结果的事件(异步操作)。并且这个事件提供统一的API,可供进一步处理。

Scratch自定义积木块

使用图形化编程工具,每个积木块具有特定功能,多个积木块堆积,按照顺序逐步执行,在单个积木块中实现功能时大概率会使用异步函数,比如调用后台数据接口,比如需要等待用户操作。
如果我们定义咯一个音视频输入的积木块,首先音视频属于需要异步处理,处理结果和后台数据交互也需要异步处理,这个时候就复现咯刚才提到的异步操作的依赖关系。那么Promise就派上用场啦。

基于Promise的基本语法可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果

Promise创建时不一定知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这使异步方法可以像同步方法一样返回值:异步方法返回立即提供最终值的承诺,而不是立即返回最终值。
A Promise处于以下状态之一:

  • 待定:初始状态,既未实现也不被拒绝。
  • 完成:表示操作成功完成。
  • 拒绝:表示操作失败。

未完成的承诺可以通过值来实现,也可以通过原因(错误)来拒绝。当这些选项中的任何一个发生时,将被诺言then方法排队的相关处理程序被调用。(如果附加了相应的处理程序时,诺言已经实现或被拒绝,则将调用该处理程序,因此在异步操作完成和其处理程序之间没有竞争条件。

promise.then(), promise.catch()将这些状态连接起来。

这些方法promise.then(), promise.catch(), and promise.finally()用于将进一步的操作与已兑现的承诺相关联。这些方法还返回一个新生成的Promise对象,该对象可以有选择地用于链接


promises.png

你可能感兴趣的:(Promise在Scratch自定义积木块中的应用)