写点什么

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:42521

评论

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

Netty核心概念之ChannelHandler&Pipeline&ChannelHandlerContext

CRMEB

企业可以定级吗?可以自己确定等保等级吗?

行云管家

网络安全 等保 等级保护 等保2.0

Python监督学习之分类算法的概述

王小王-123

Python 人工智能 机器学习 分类算法

【重构前端知识体系之HTML】HTML5给网页音频带来的变化

归子莫

html 前端 1月月更 audio

智联生活行业加速器热门FAQ:物联网企业该如何与华为云合作?

华为云开发者联盟

物联网 华为云 智联生活 智联生活行业加速器 云市场

2022年Flutter真的会一统大前端吗?

坚果

Flutter 小菜 1月月更

国内公有云首个支持保留消息功能!百度智能云天工物联网核心套件技术再升级

百度大脑

人工智能

服务网格的落地探索和实践

ZEGO即构

微服务 istio 服务网格 音视频开发

SparkSQL高并发:读取存储数据库

华为云开发者联盟

数据库 高并发 Sparksql 存储 读取

起个变量名,好的代码应该是这样的

蜜糖的代码注释

Java 互联网 开发 后端技术

《火绒安全2021终端安全情报年鉴》发布 拦截弹窗广告45亿次

火绒安全

网络安全 终端工具 终端安全 勒索攻击 弹窗

从重大漏洞应急看云原生架构下的安全建设与安全运营(上)

腾讯安全云鼎实验室

云原生 安全漏洞 安全服务

数智融合加速驱动企业商业创新

用友BIP

大数据 数据中台

M1 用不了 Vagrant 只能用这个代替了“ Multipass” 一个 如Docker般的虚拟机

edd

第四节:SpringBoot中web模版数据渲染展示

入门小站

springboot

迭代发布后,为什么还需要开迭代回顾会议?

LigaAI

团队管理 敏捷开发

腾“云”架“雾”,3DCAT带你进入元宇宙

3DCAT实时渲染

云渲染 元宇宙

无服务器计算Serverless能否引领云计算下一个十年?

用友BIP

云计算 容器 无服务器计算

markdown-it 插件如何写(三)

冴羽

JavaScript 前端 vuepress markdown-it markdown-it插件

中科柏诚:积极践行为中小企业服务宗旨,同乡村振兴有效衔接

联营汇聚

【监控体系】全面系统的Zabbix讲解 | 含源码&监控类型整理

云智慧AIOps社区

运维 监控 zabbix 智能运维 监控工具

深入浅出Apache Pulsar(4)Pulsar Functions

云智慧AIOps社区

Apache kafka 云原生 pulsar 消息中间件

☕【Java深层系列】「并发编程系列」让我们一起探索一下CyclicBarrier的技术原理和源码分析

洛神灬殇

并发编程 AQS CyclicBarrier Java 线程 1月日更

8节深度学习干货课程,帮你轻松点亮AI项目开发技能

OpenI启智社区

人工智能 深度学习

Python 判断图片和文件真实类型(qbit)

qbit

后缀

在线XML转JSON工具

入门小站

工具

SAP ABAP 业务开关和 SAP 电商云的 Feature Level

汪子熙

angular abap 1月月更 增强包 增强技术

【安全漏洞】Struts2漏洞集合总结

H

网络安全 安全漏洞

面试官:知道 Flutter 生命周期?下周来入职!

百瓶技术

前端 生命周期 客户端 Flutter 小菜

字节跳动数据湖技术选型的思考与落地实践

字节跳动数据平台

数据湖 数据流 Apache Hudi

恒源云(GPUSHARE)_Teacher Forcing训练小技巧来啦~

恒源云

深度学习 语音识别

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