速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

评论

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

CECBC区块链专委会副主任吴桐主讲全国社保基金数字货币讲座

CECBC

区块链 数字货币

JDK14性能管理工具:jmap和jhat使用介绍

程序那些事

内存泄露 JDK14 jmap jhat

Guava-技术专题-Cache用法介绍

洛神灬殇

为什么学Go(二)

soolaugust

Go 语言

第四周 系统架构学习总结

蓝黑

极客大学架构师训练营

极客时间 - 架构师一期 - 第四周作业

_

第四周作业 架构师一期

优质数据库管理工具盘点,看看这三个软件的区别

BinTools图尔兹

数据库 sql 云原生 工具 编辑器

容器技术之发展简史

阿里云基础软件团队

云原生

优秀开源项目、博客、书籍整理

铁匠

收藏教程 资源汇总

第四周总结

_

极客大学架构师训练营 第四周总结

一个草根的日常杂碎(10月9日)

刘新吾

随笔杂谈 生活记录 社会百态

一个草根的日常杂碎(10月11日)

刘新吾

随笔杂谈 生活记录 社会百态

通俗易懂和你聊聊寄存器那些事(精美图文)

苹果看辽宁体育

后端 计算机 汇编

面经手册 · 第13篇《除了JDK、CGLIB,还有3种类代理方式?面试又卡住!》

小傅哥

Java 字节码编程 asm 动态代理 cglib

我们可以把Adapter精简到什么地步

mengxn

RecyclerView BetterAdapter Adapter

Apple Developer 开发者账号申请&实名认证【2020】

iHTC

Apple Developer iOS Developer 苹果实名认证

一个草根的日常杂碎(10月10日)

刘新吾

随笔杂谈 生活记录 社会百态

如何优化多表查询情况下的查询性能问题

迹_Jason

数据库设计 架构设计 查询优化 数据优化

华为程序员发现孩子不是自己的,怒提离婚!女方不要孩子!绿他的竟然是个酒吧混混!

程序员生活志

华为 程序员

每个数据科学家都应该知道的5个概念

计算机与AI

学习 数据科学

SpringBoot-技术专题-多环境下maven打包

洛神灬殇

融合与共生之下,区块链都能“+”什么?

CECBC

区块链 大数据

区块链需与5G等技术打好“组合拳”

CECBC

区块链 5G

当我们在谈论跨平台的时候 ——— 我们在说什么

iHTC

跨平台

你不知道的java对象序列化的秘密

程序那些事

Java java序列化 序列化的秘密

JVM系列笔记 - 寄存器

朱华

JVM

正则表达式知识总结

iHTC

正则表达式

商业模式和盈利模式的思考

iHTC

商业模式 盈利模式 地摊经济

iOS Handle Refunds 处理退款 --- WWDC20(Session 10661)

iHTC

WWDC2020 wwdc iap 苹果退款 iOS退款

随想

Nydia

【高并发】面试官:讲讲高并发场景下如何优化加锁方式?

冰河

性能优化 高并发 线程安全 同步 加锁

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