await 到底在等啥?
一般来说,开始都认为是在等得一个async函数完成。但是按照语法说明的话,await是在等一个表达式,这个表达式的计算结果是Promise对象或者其它值(也就是说,没有什么特殊限定)。
因为async函数返回一个Promise对象,所以可以用于对待一个async函数的返回值——这也可以说是await在等async函数,但是要清楚的是,它等的实际是一个返回值。注意到await不仅仅用于等Promise对象,它可以等任意表达式的结果,所以await后面实际是可以接普通函数调用或者直接量的。所以下面这个示例完全可以正确运行:
function getSomething() {return "something";
}async function testAsync() {return Promise.resolve("hello async");
}async function test() {const v1 = await getSomething();const v2 = await testAsync();console.log(v1, v2);
}test();
await表达式的运算结果取决于它等的是什么:
- 如果它等到的不是一个Promise对象,那么await表达式的运算结果就是它等到的东西。
- 如果它等到的是一个Promise对象,await就忙起来了,它会阻塞后面的代码,等着Promise对象resolve,然后得到resolve的值,作为await表达式的运算结果。
举个例子:
function testAsy(x){return new Promise(resolve=>{setTimeout(() => {resolve(x);}, 3000)})
}async function testAwt(){ let result = await testAsy('hello world');console.log(result); // 3秒钟之后出现hello worldconsole.log('cuger') // 3秒钟之后出现cuger
}testAwt();console.log('cug') //立即输出cug// cug
// hello world
// cuger
这就是await必须用在async函数中的原因。async函数调用不会造成阻塞,它内部所有的阻塞都被封装在一个Promise对象中异步执行。await暂停当前async的执行,所以‘cug’会最先输出,hello world和cuger是3秒后同时出现的。
await 到底在等啥?相关推荐
- async js 返回值_JS异步编程 | Async / Await / Generator 实现原理解析
async/await实现 在多个回调依赖的场景中,尽管Promise通过链式调用取代了回调嵌套,但过多的链式调用可读性仍然不佳,流程控制也不方便,ES7 提出的async 函数,终于让 JS 对于异 ...
- 理解 JavaScript 的 async/await
随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...
- JavaScript 的 async/await 理解(4)
随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...
- 【JS】1015- 异步编程的终极解决方案 async/await
早期的回调函数 回调函数我们经常有写到,比如: ajax(url, (res) => {console.log(res); }) 复制代码 但是这种回调函数有一个大缺陷,就是会写出 回调地狱(C ...
- 避免回调地狱的解决方案 async/await:用同步的方式去写异步代码
文章目录 前言 一.引入异步编程 二.常见处理异步编程的几种方式 1.Generator函数 2.Promise函数 3.async/await 总结 前言 这篇文章主要给大家分享一下,自己关于异步编 ...
- 理解异步函数async和await的用法
定义 async作为一个关键字放在函数前面,表示该函数是一个异步函数,异步函数意味着该函数的执行不会阻塞后面代码的执行:而 await 用于等待一个异步方法执行完成: async/await的作用就是 ...
- async await
随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...
- java有async和await吗,理解 JavaScript 的 async/await
2020-06-04 更新 JavaScript 中的 async/await 是 AsyncFunction 特性 中的关键字.目前为止,除了 IE 之外,常用浏览器和 Node (v7.6+) 都 ...
- python loop until_python3-asyncio 学习笔记 3 -- run_until_complete
在笔记1中追踪了 call_soon这中调用方式是如何运行的,这次看一看 run_until_complete是怎么工作的. 还是由一个简单的例子开始: import asyncio async de ...
最新文章
- Python 使用CORS跨域资源共享解决flask服务器跨域问题、浏览器同源策略
- Java实现找出数组中重复次数最多的元素以及个数
- php内存映射,如何用ZwMapViewOfSection将Driver分配的内存映射到App空间?
- rotateright_Java Long类rotateRight()方法的示例
- Linux中Tomcat 服务的搭建
- 如何在支付宝成为增加个人服务器,支付宝支付,服务器如何生成支付订单
- 瑞恩面试编程题:找出一个目录下所有的文件
- ?请问怎样将excel表格中的时间格式读取为字符串格式?
- python400集_今日分享」Python400集全套教程
- HTML5矢量实现文件上传进度条
- sap事务代码如何收藏_一、SAP中添加一个模块到收藏夹后,显示事务代码
- 软件测试(三)--标准的测试用例模板
- 谈2010年WEBGAME的发展趋势
- 火箭08-09赛程列表
- OpenGL第二讲——绘制简单的几何图形
- 28个Unix/Linux的命令行神器
- 【MATLAB图像处理】图像复原
- 知识点3-设计模式与实践
- 解除Word的编辑保护【简单版】
- mstsc登录xubuntu16.04