AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

Javascript 之 async 四重奏(三)

  • 2019-12-31
  • 本文字数:1072 字

    阅读完需:约 4 分钟

Javascript之async四重奏(三)

async-await 的兼容并包

async 函数

在 es7 中引入的 async 函数使得处理异步操作更加方便:


直接在普通函数前面加上 async,表示这是一个异步函数,在要异步执行的语句前面加上 await,表示后面的表达式需要等待。我们通过下面的例子先简单了解一下:


(注:左右/上下滑动屏幕可查看全部代码)


function timeout(ms) { return new Promise((resolve) => {   setTimeout(resolve, ms); });}async function asyncPrint(value, ms) { await timeout(ms); console.log(value);}asyncPrint('hello world', 50);
复制代码


上面的代码指定 50 毫秒后输出 hello world


async 函数有多种使用方式:


// 函数声明式:


async function foo() {}


// 函数表达式:


const foo = async function () {}


// 对象的方法:


let obj = {async foo() {}}


obj.foo().then()


// 箭头函数:


const foo = async () => {}


async 函数返回一个 promise 对象,可以使用 then 方法添加回调函数:


(注:左右/上下滑动屏幕可查看全部代码)


async function f() {return 'hello world';}f().then(v => console.log(v))// "hello world"
复制代码


Await 命令后面是一个 promise 对象,如果不是会被转成一个立即 resolve 的 promise 对象:


(注:左右/上下滑动屏幕可查看全部代码)


async function f() {return await 123;}f().then(v => console.log(v))// 123
复制代码


通过 async 函数来发送多个请求:


(注:左右/上下滑动屏幕可查看全部代码)


async function dbFuc(db) {let docs = ['/posts.json', '/gets.json', '/puts.json'];let promises = docs.map((doc) => db.post(doc));let results = await Promise.all(promises);console.log(results);}
复制代码


由此可见,async 函数不仅包含了 promise、generator,代码也更加简洁。


总的来说,async 函数就是 generator 函数的语法糖,相对于 generator 函数 async 函数有以下优点:


  1. 有内置执行器,不用调用 next

  2. Generator 函数是需要调用 next 指令来运行异步的语句,async 不需要调用 next,直接像运行正常的函数那样运行就可以

  3. 有更好的语义化

  4. 语义化更明确,相比较于 Generator 的*和 yield,async 和 await 更明确。

  5. await 后面可以跟 promise 或者任意类型的值

  6. yield 命令后面只能是 Thunk 函数或 Promise 对象,而 async 函数的 await 命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时等同于同步操作)。

  7. 返回一个 promise 对象,可以调用.then

  8. async 直接返回一个 promise 对象,可以用 then 和 catch 来处理。


本文转载自 Think 体验设计公众号。


原文链接:https://mp.weixin.qq.com/s/QgC2OjVF4pvltte9V_gkIQ


2019-12-31 15:42682

评论

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

软件测试学习笔记丨Cookie处理

测试人

软件测试

足球与AI,开创足球预测新纪元

Geek_a17c4b

数据挖掘 机器学习 深度学习 AI 足球

对话天润融通首席科学家:大模型的首要任务是为客户创造商业价值

天润融通

人工智能

网络加速解决方案:实现企业网络高效访问

Ogcloud

网络加速 CDN加速 企业组网 海外网络加速

【YashanDB知识库】字段加上索引后,SQL查询不到结果

YashanDB

yashandb 崖山数据库 崖山DB

ISP代理与住宅代理的主要区别

IPIDEA全球HTTP

技术 ISP 代理IP

闲鱼开发者必读:闲鱼商品详情数据接口完全指南

tbapi

闲鱼API 闲鱼商品详情数据接口 闲鱼商品数据采集 闲鱼平台API接口 闲鱼商品详情API

SD-WAN能否优化SaaS访问体验?

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

天润融通微藤大模型,如何助力市场部构建企业增长飞轮?

天润融通

拼多多商品详情数据接口全解析:获取商品信息的高效途径

tbapi

拼多多 拼多多商品详情数据接口 拼多多API 拼多多商品数据采集

Linux多线程

不在线第一只蜗牛

Linux 运维 多线程 服务器

InfoQ对话天润融通CTO|AI时代,开发者的机遇与挑战?

天润融通

人工智能

Burp Suite:黑客与白帽子最常用的安全测试工具详解

测吧(北京)科技有限公司

测试

第59期|GPTSecurity周报

云起无垠

软件测试学习笔记丨接口请求体-xml

测试人

软件测试

直播预约丨《指标体系建设实战》第四期:如何构建全面的指标管理体系

袋鼠云数栈

大数据 指标体系 指标管理 指标中台 指标建设

从IDC数据中心到云再到智算中心,苏州IDC决胜算力新时代

苏州服务器托管

数据中心

Web 开发者必备:最推荐的工具清单

Liam

程序员 前端 Web

Sentieon | 应用教程:唯一分子标识符(UMI)

INSVAST

基因测序 基因数据分析 生信服务

常见接口安全测试工具介绍:ZAP、Burp Suite、SQLMap 等知名安全测试工具

测吧(北京)科技有限公司

测试

客户在哪儿AI让ToB全面了解竞争对手、赢得竞争

客户在哪儿AI

ToB营销 ToB增长 ToB销售

【YashanDB知识库】用户密码带@字符时exp和imp无法使用

YashanDB

yashandb 崖山数据库 崖山DB

软件测试学习笔记丨XML响应断言

测试人

软件测试

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