`
乱蓬头199303
  • 浏览: 80436 次
文章分类
社区版块
存档分类
最新评论

使用 Webix 创建 Email 客户端

阅读更多

摘要: 回调函数真正的问题在于他剥夺了我们使用 return 和 throw 这些关键字的能力。而 Promise 很好地解决了这一切

回调函数真正的问题在于他剥夺了我们使用 return 和 throw 这些关键字的能力。而 Promise 很好地解决了这一切

Promise概念

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

直接打印 console.dir(Promise) 来看看

520134_20160311003722741_755677508

这么一看就明白了,Promise是一个构造函数,自己身上有all、reject、resolve这几个眼熟的方法,原型上有then、catch等同样很眼熟的方法。这么说用Promise new出来的对象肯定就有then、catch方法

Promise特点

Promise 对象有以下两个特点

1.对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是「承诺」,表示其他手段无法改变。

2.一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固不会再变了,会一直保持这个结果。就算改变已经发生,你再对Promise对象添加回调函数也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象提供统一的接口,使得控制异步操作更加容易。

Promise 也有一些缺点。首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消。其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部。第三,当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)

new一个Promise来看看:

Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。其实这里用“成功”和“失败”来描述并不准确,按照标准来讲,resolve是将Promise的状态置为fullfiled,reject是将Promise的状态置为rejected。不过在我们开始阶段可以先这么理解,后面再细究概念。

在上面的代码中,我们执行了一个异步操作,也就是setTimeout,2秒后,输出“执行完成”,并且调用resolve方法。

运行代码,会在2秒后输出“执行完成”。注意!我只是new了一个对象,并没有调用它,我们传进去的函数就已经执行了,这是需要注意的一个细节。所以我们用Promise的时候一般是包在一个函数中,在需要的时候去运行这个函数,如:

在我们包装好的函数最后,会return出Promise对象,也就是说,执行这个函数我们得到了一个Promise对象。还记得Promise对象上有then、catch方法吧?这就是强大之处了,看下面的代码:

在runAsync()的返回上直接调用then方法,then接收一个参数,是函数,并且会拿到我们在runAsync中调用resolve时传的的参数。运行这段代码,会在2秒后输出“执行完成”,紧接着输出“随便什么数据”

这时候应该有所领悟,原来then里面的函数就跟我们平时的回调函数一个意思,能够在runAsync这个异步任务执行完成之后被执行。这就是Promise的作用;简单来讲,就是能把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。

当然,我把回调函数封装一下,给runAsync传进去也是一样吗,就像这样:

那么问题来了,有多层回调该怎么办?如果callback也是一个异步操作,而且执行完后也需要有相应的回调函数,该怎么办呢?总不能再定义一个callback2,然后给callback传进去吧。而Promise的优势在于,可以在then方法中继续写Promise对象并返回,然后继续调用then来进行回调操作

原文链接

分享到:
评论

相关推荐

    WebIX4.3开发手册

    4. **高性能**:WebIX使用虚拟DOM技术,确保即使在处理大量数据时也能保持流畅的性能,提高了用户的交互体验。 5. **易于集成**:WebIX可以无缝集成到现有的HTML和CSS结构中,也可以与其他前端框架如Angular、React...

    webix3.0下载

    阅读此文件对于理解你可以如何在项目中使用Webix至关重要,因为不正确的使用可能会引起法律问题。 2. **whatsnew.txt**:这个文件详述了Webix 3.0版本相较于之前版本的新特性、改进和修复的bug。开发者可以通过这个...

    WebIX5.1开发手册

    7. **主题系统**:Webix内置了多种预设主题,开发者可以选择适合项目风格的主题,也可以自定义CSS样式来创建独一无二的界面外观。 8. **API友好**:Webix提供了全面的API文档和丰富的示例,帮助开发者快速上手并...

    webix.trial.zip

    Webix是一个强大的基于HTML5的前端用户界面...通过探索这个压缩包,开发者可以快速掌握Webix的使用,从而提升开发效率,创建出功能强大且用户友好的Web应用程序。无论是新手还是经验丰富的开发者,都能从中受益匪浅。

    叫板EasyUI的下一代UI产品:Webix Pro V3.3.1.7

    - `samples`:这是一个包含示例代码的目录,可以帮助开发者快速了解和学习如何使用Webix Pro的各种组件和功能。 - `codebase`:这个目录包含了Webix Pro的核心代码库,供开发者深入研究和定制。 - `readme.txt`:...

    webix数据表格锁列-翻页-统计示列

    Webix是一个强大的JavaScript库,用于构建富客户端应用,特别是数据驱动的用户界面。在Webix中,数据表格(DataTable)是其核心组件之一,能够轻松处理大量数据并提供丰富的交互功能。本文将深入探讨如何利用Webix...

    webix资源下载

    Webix提供了简单的服务端集成控件,PHP、 ASP.NET、Java和 Ruby等各种技术都可以跟客户端的Webix部件直接通讯。此外这些组件还能用在一些MVC框架中,比如RoR、ASP.NET MVC、Spring、Struts 和 Grails.

    webix英文手册API

    webix目前使用的人好像不多,但它是一款挺好用JavaScript UI 库,写法有点类似extJS,但可以构建跟HTML5 和 CSS3 兼容的程序。此为webix API

    webix最新版CHM文档手册

    前端框架webix用户手册 ...

    【全网首发】叫板EasyUI的下一代UI产品:Webix Pro V4.2.0

    在许可证方面,提供的"Webix Trial Developer License Agreement"文档(包括PDF、RTF和TXT格式)详细阐述了使用Webix Pro的条款和条件,这对于开发者了解如何合法合规地使用这个产品至关重要。 总的来说,Webix Pro...

    webix ui框架

    用户可以通过这个文件快速了解Webix的各种组件、方法和配置选项,以便于在项目中使用。 2. **whatsnew.txt**:这是一个更新日志文件,记录了Webix v25相较于前一版本的改进和新特性。开发者可以通过阅读这个文件...

    webix文档CHM

    webix 前端JS框架 chm 文档 webix 4.3

    webix_v50.chm最新版的webix用户参考手册

    webix_v50.chm 官方最新文档 新加了一些功能 需要的同学可以在手册里面查找

    webix用户手册

    前端框架webix用户手册,需要的童鞋可以下载下来。很好用的手册,webix前期学习可能有点困难,但是后期开发会越来越快。

    webix-jet:用于 Webix UI 的 Webix Jet 微框架

    Webix Jet 微框架微框架 有用的链接 文档: : 支持论坛: : 演示 入门应用程序 - 功能演示 - 界面演示 - 使用来源 //compile to es5 npm run dist //run lint and test npm run lint && npm run test 许可...

    webix:Webix UI的稳定版本-用于构建移动和桌面Web应用程序JavaScript库

    这样就可以在以MIT,BSD和其他开放源代码许可分发的应用程序中使用Webix。 执照对外行而言意味着什么 您无法从源文件中删除此许可证或webix归属 您可以以与上述陈述不冲突的任何方式修改提供的代码 您可以将此lib...

    Practical Webix Learn to Expedite and Improve your Web Development epub

    Practical Webix Learn to Expedite and Improve your Web Development 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

    meteor-webix-adminapp:流星Webix管理员应用程序

    2. **Webix UI库**:提供了丰富的组件和MVC架构,用于创建响应式和高性能的用户界面。 3. **MVC模式**:模型-视图-控制器设计模式,有助于分离业务逻辑、用户界面和数据管理。 4. **JavaScript编程**:项目中的主要...

    jet-demos:Webix Jet 演示

    Webix Jet 演示 Repo 包含 Jet 1.x 的演示 如何开始 npm install npm start 打开http://localhost:8080 网络用户界面 Webix Jet 文档

Global site tag (gtag.js) - Google Analytics