【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

Javascript 之 async 四重奏(二)

  • 2019-12-31
  • 本文字数:895 字

    阅读完需:约 3 分钟

Javascript之async四重奏(二)

Promise 的实例

通过 Promise 实现一个 ajax:


(注:左右/上下滑动屏幕可查看全部代码)


const getJSON = function(url) { const promise = new Promise(function(resolve, reject){   const handler = function() {     if (this.readyState !== 4) {       return;     }     if (this.status === 200) {       resolve(this.response);     } else {       reject(new Error(this.statusText));     }   };   const client = new XMLHttpRequest();   client.open("GET", url);   client.onreadystatechange = handler;   client.responseType = "json";   client.setRequestHeader("Accept", "application/json");   client.send(); 
});
return promise;};
getJSON("/posts.json").then(function(json) { console.log('Contents: ' + json);}, function(error) { console.error('Error:', error);});
复制代码


在上面的例子中我们看到的是 Promise.prototype.then()方法的使用,还有其他的方法:



虽然 Promise 有着非常灵活的使用方式,但是仍不免存在一些缺点:


无法中途取消 Promise、无法直接从外部知道 Promise 抛出的错误、无法具体了解 pending 状态中的阶段。而 Promise 的这些问题却在我们的下一个话题—generator 中得到了解决。


Generator 的顺势而为

Generator 函数

Generator 函数是 ES6 提供的一种异步编程解决方案。


语法上,可以把它理解成:Generator 函数是一个状态机,封装了多个内部状态。形式上,Generator 函数是一个普通函数。整个 Generator 函数就是一个封装的异步任务,或者说是异步任务的容器,异步操作需要暂停的地方,都用 yield 语句。


Generator 函数有两个特征:


(1)function 关键字和函数之间有一个星号(*),且内部使用 yield 表达式,定义不同的内部状态。


(2)调用 Generator 函数后,该函数并不执行,返回的也不是函数运行结果,而是一个指向内部状态的指针对象。


执行 Generator 函数会返回一个遍历器对象,可以依次遍历函数内部的每一个状态。这个遍历器对象有三个方法:next()、throw()、return().


本文转载自 Think 体验设计公众号。


原文链接:https://mp.weixin.qq.com/s/QgC2OjVF4pvltte9V_gkIQ


2019-12-31 15:42444

评论

发布
暂无评论
发现更多内容

Premiere Pro 2023 for Mac(pr2023视频编辑软件)v23.6中文激活版

mac

pr2023 苹果mac Windows软件 视频编辑软件 Premiere Pro

6 个用于 3D 网页图形渲染的最佳 WebGL 库

3D建模设计

图形引擎

WebGL:基于web的交互式2D/3D图形引擎

3D建模设计

JavaScript WebGL

持续性能优化:确保应用保持高性能

这我可不懂

性能优化 高性能

Java实现学生信息管理系统读取Excel数据

SoFlu软件机器人

AI技术图像编辑 Luminar Neo for Mac激活中文

mac大玩家j

图像编辑 Mac软件 编辑图像 图像处理工具

com.google.guava:guava 组件安全漏洞及健康分析

墨菲安全

组件 组件健康度

WebGPT VS WebGPU

3D建模设计

webgpu webgpt

org.mockito:mockito-core 组件安全漏洞及健康度分析

墨菲安全

组件 组件健康度

com.squareup.okhttp3:okhttp 组件安全漏洞及健康度分析

墨菲安全

组件 组件健康度 组件安全漏洞

关于信创技术你需要了解这些概念

Onegun

操作系统 中间件 信创产业 信创生态

WebVR — 网络虚拟现实

3D建模设计

WebVR

华为云软件精英实战营——感受软件改变世界,享受Coding乐趣

华为云PaaS服务小智

软件开发 华为云 大赛

低代码开发平台如何提升企业应用构建效率

力软低代码开发平台

低代码是什么?能做什么?

树上有只程序猿

低代码 应用开发

WebAssembly 在云原生中的实践指南

Se7en

软件测试|Mac安装appium报权限问题

霍格沃兹测试开发学社

低代码/无代码平台:加速应用开发的工具

高端章鱼哥

低代码 快速开发 无代码 JNPF

【附 Demo】悦数图数据库推出 Graph RAG: 减少大模型“幻觉”,优化向量数据库检索能力

最新动态

OLAP数据库引擎怎么选?这本白皮书详解

Geek_2d6073

软件测试/测试开发丨UI自动化测试用例结构分析

测试人

Python 程序员 软件测试 自动化测试 测试开发

3D 碰撞检测

3D建模设计

3D 碰撞检测

提升开发能力的低代码思路

互联网工科生

软件开发 低代码 企业级应用程序开发

火山引擎开源通用多媒体处理框架 BMF

字节跳动开源

开源 框架 视频云 多媒体

Katalyst:字节跳动云原生成本优化实践

字节跳动开源

开源 Kubernetes 运维 云原生 成本优化

直播预告!生鲜与零售商品识别系统产业实践与部署详解

飞桨PaddlePaddle

人工智能 百度飞桨 硬件生态

Pr2023v23.6 Mac中文激活版 Premiere Pro安装包下载及安装教程

晴雯哥

九科信息成功签约东风汽车财务有限公司RPA项目

九科Ninetech

智能汽车驾驶演进:虚拟ECU种类与优劣分析

DevOps和数字孪生

虚拟ECU 汽车行业

GitHub Copilot三连更:能在代码行里直接提问,上下文范围扩展到终端

Openlab_cosmoplat

人工智能

Git 速查表:中级用户必备的 12 个 Git 命令

Se7en

Javascript之async四重奏(二)_语言 & 开发_Think体验设计_InfoQ精选文章