AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

评论

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

K8S 应用部署

kubenetes

博睿数据一体化智能可观测平台入选中国信通院2022年“云原生产品名录”

博睿数据

智能运维 博睿数据 One 智能可观测平台

从零开始学 MySQL —数据库和数据表操作

C++后台开发

MySQL 数据库 中间件 后端开发 C++开发

混沌工程平台 ChaosBlade-Box 新版重磅发布

阿里巴巴云原生

阿里云 分布式 云原生 混沌工程

直播带货系统软件开发,Android和iOS的区别在哪里?

开源直播系统源码

ios开发 Android开发 直播带货系统 原生开发 混合开发

ABAP-屏幕切换时,刷新上一个屏幕

桥下本有油菜花

abap

【计算讲谈社】第四讲:自动驾驶,未来的移动智能载体?

大咖说

自动驾驶 阿里云 科技

宝,运维100+服务器很头疼怎么办?用行云管家!

行云管家

云计算 运维 服务器 云管

毕业总结

流火

6月刊 | AntDB数据库参与编写《数据库发展研究报告》 亮相信创产业榜单

亚信AntDB数据库

数据库 AntDB 国产数据库

重磅披露!上百个重要信息系统被入侵,主机成为重点攻击目标

青藤云安全

网络安全 网络攻击防御

MySQL审计插件介绍

Simon

MySQL 运维 MySQL 数据库

C#/VB.NET 合并PDF文档

在下毛毛雨

C# .net PDF 文件合并

远程办公经验?来一场自问自答形式的介绍吧~ | 社区征文

为自己带盐

初夏征文 7月月更

越来越多地使用 SLO 来实现可观测性|DevOps

观测云

可观测性

云服务器ECS夏日省钱秘籍,这次@老用户快来领走

阿里云弹性计算

阿里云 云服务器ECS

户外LED显示屏应该考虑哪些问题?

Dylan

LED显示屏 户外LED显示屏

Python|小白如何入门Python?记我的Python初体验

AXYZdong

7月月更

StoneDB 为国产数据库添砖加瓦,基于 MySQL 的一体化实时 HTAP 数据库正式开源!

StoneDB

大数据 MySQL 数据库 #数据库 HTAP #开源

独家消息:阿里云悄然推出RPA云电脑,已与多家RPA厂商开放合作

王吉伟频道

阿里云 RPA 无影云电脑 RPA云电脑 RPA+DaaS

【6.24-7.1】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

贝联珠贯加入龙蜥社区,共同促进碳中和

OpenAnolis小助手

开源 龙蜥社区 CLA 贝联珠贯 IT资源利用

她就是那个「别人家的HR」|ONES 人物

万事ONES

云小课|3种常用Git工作流推荐

华为云开发者联盟

后端 开发 华为云

单集群1万节点!腾讯云大数据平台TBDS获得分布式批处理平台万节点能力认证

科技热闻

如何使用物联网低代码平台进行个人设置?

AIRIOT

低代码 物联网 低代码,项目开发

ABAP-调用Restful API

桥下本有油菜花

abap REST API

如何写出好代码 - 防御式编程指南

云智慧AIOps社区

Java 架构 代码质量

华为发布HCSP-Solution-5G Security人才认证,助力5G安全人才生态建设

极客天地

嗨 FUN 一夏,与 StarRocks 一起玩转 SQL Planner!

StarRocks

sql 大数据 数据库·

linux下清理系统缓存并释放内存

入门小站

Linux

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