AICon 上海站|90%日程已就绪,解锁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:42577

评论

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

mac原型设计:Axure RP 10 for Mac中文汉化版包下载

Rose

Axure RP 10 汉化版 Mac原型设计 Axure RP 10 下载

针对现状为什么需要对特权账号进行管理

尚思卓越

网络安全 特权账号管理

Mac矢量图设计Sketch for Mac v99中文激活版 永久使用

Rose

sketch Mac Mac矢量图设计 Sketch 99新功能 Sketch 中文版下载

亚马逊云科技大语言模型的创新科技

陈老老老板

DxO PhotoLab 7 for mac(专业raw图像处理工具)

展初云

Mac Raw图像处理软件 DxO PhotoLab 7

【永久激活】Netflix mac客户端 兼容M1/M2 打造极致的观影体验!

Rose

奈飞客户端 mac视频播放器 Netflix Mac激活版

直接从 Amazon EC2 控制台模拟竞价型实例集中断的情况

亚马逊云科技 (Amazon Web Services)

Amazon EC2

OpenHarmony社区运营报告(2023年10月)

OpenHarmony开发者

OpenHarmony

HTML文本编辑器BBEdit for Mac破解版(附注册码)支持M1/M2

Rose

html 代码编辑器 Mac破解软件 BBEdit注册版 BBEdit for Mac破解版

文生图大型实践:揭秘百度搜索AIGC绘画工具的背后故事!

百度Geek说

AIGC 文生图 Ai绘图 企业号11月PK榜 百度搜索场景应用

HarmonyOS NEXT调优工具Smart Perf Host高效使用指南

HarmonyOS开发者

HarmonyOS

苹果最新系统:macOS 14 Sonoma 14.1.1正式版

加油,小妞!

macOS 14 Sonoma Macos最新系统

【Data & AI Con Shanghai 2023】嘉宾专访|西电王皓:认清边界 大胆创新

白玉兰开源

人工智能 白玉兰开源

macOS 14 Sonoma 14.1.1正式版(最新苹果系统) pkg完整安装包

Rose

苹果系统 macOS 14 Sonoma Mac14系统

Barcode for Mac:快速生成各类条形码

Rose

mac软件下载 条形码设计 Barcode for Mac Barcode 下载

ps cc2019 Mac中文直装版v20.0.10 兼容M1

Rose

ps cc2019 Photoshop2019破解版 PS2019 Mac中文版下载

Sketch 99 for mac(矢量绘图软件)

展初云

Mac 矢量绘图 Sketch

亚马逊云科技加速大语言模型的创新应用

三掌柜

亚马逊云科技

DxO PureRAW 3 for mac(raw照片智能处理工具)

展初云

Mac DxO PureRAW raw智能照片处理工具

一体式Mac系统清理应用 AweCleaner 最新免激活版

胖墩儿不胖y

Mac软件 清理工具 系统清理软件

graphpad prism 10 for mac永久注册码 prism10下载

Rose

mac软件下载 GraphPad Prism 10 数据分析绘图软件 Prism 10 Mac破解

依赖关系指的在Linux操作系统中,如何解决软件依赖关系?

小齐写代码

macos智能图片编辑工具:DxO PhotoLab 6 中文版

加油,小妞!

Raw图像处理软件 DxO PhotoLab 6

Dash for Mac v7.1.6激活版 提升API文档编写效率

Rose

API文档 Mac破解软件 Dash Mac破解版 Dash下载

提示找不到某些库文件?

矩视智能

深度学习 机器视觉

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