【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

评论

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

k8s client-go源码分析 informer源码分析(5)-Controller&Processor源码分析

良凯尔

云原生 Kubernetes, 云原生, eBPF Client-go

【译】别用大炮打蚊子—ServiceMesh的替代方案

九零后程序员

nginx Service Mesh 网络 security 服务网格

OpenHarmony/HarmonyOS路由跳转并传值

坚果

OpenHarmony 6 月 优质更文活动

情感语音合成,让机器如真人一样和我们交流

来自四九城儿

语音识别唤醒词的技术与应用

来自四九城儿

如何在 Linux 中从备份恢复 Crontab?

wljslmz

Linux Cron 6 月 优质更文活动

如何在Cisco设备上停止Traceroute或Ping?

wljslmz

网络工程师 6 月 优质更文活动

基于Linux设计的倒车雷达系统

DS小龙哥

6 月 优质更文活动

情感语音识别技术及其应用

来自四九城儿

ArkTS语言OpenHarmony/HarmonyOS项目代码规范

坚果

OpenHarmony 6 月 优质更文活动

k8s client-go源码分析 informer源码分析(4)-DeltaFIFO源码分析

良凯尔

容器 云原生 client Kubernetes, 云原生, eBPF Client-go

Kubernetes CNI 网络模型及常见开源组件

穿过生命散发芬芳

cni 6 月 优质更文活动

驾驶新时代:车载语音识别的革命性进展与应用

来自四九城儿

情感语音识别数据的重要性及其在人机交互领域的应用

来自四九城儿

模块五作业:微博发评论高性能高可用架构

家有两宝

#架构训练营

情感语音识别技术的挑战和未来发展

来自四九城儿

探索中国方言多样性:中国方言数据库的重要性与应用

来自四九城儿

Nautilus Chain:模块化Layer3架构为RWA赛道构建基础设施

西柚子

语音合成数据的重要性:打造自然流畅的语音合成体验

来自四九城儿

挖掘中国方言语音数据的重要性与应用

来自四九城儿

k8s client-go源码分析 informer源码分析(6)-Indexer源码分析

良凯尔

云原生 Kubernetes, 云原生, eBPF Client-go

Nautilus Chain:模块化Layer3架构为RWA赛道构建基础设施

BlockChain先知

TTS语音合成技术的挑战和未来发展

来自四九城儿

语音识别唤醒词的挑战与未来发展

来自四九城儿

车载语音数据的重要性及关键技术:打造智能驾驶的人机交互体验

来自四九城儿

Nautilus Chain:模块化Layer3架构为RWA赛道构建基础设施

大瞿科技

方言语音数据在方言语音识别中的关键作用

来自四九城儿

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