一般来说,开始都认为是在等得一个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表达式的运算结果取决于它等的是什么:

  1. 如果它等到的不是一个Promise对象,那么await表达式的运算结果就是它等到的东西。
  2. 如果它等到的是一个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 到底在等啥?相关推荐

  1. async js 返回值_JS异步编程 | Async / Await / Generator 实现原理解析

    async/await实现 在多个回调依赖的场景中,尽管Promise通过链式调用取代了回调嵌套,但过多的链式调用可读性仍然不佳,流程控制也不方便,ES7 提出的async 函数,终于让 JS 对于异 ...

  2. 理解 JavaScript 的 async/await

    随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...

  3. JavaScript 的 async/await 理解(4)

    随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...

  4. 【JS】1015- 异步编程的终极解决方案 async/await

    早期的回调函数 回调函数我们经常有写到,比如: ajax(url, (res) => {console.log(res); }) 复制代码 但是这种回调函数有一个大缺陷,就是会写出 回调地狱(C ...

  5. 避免回调地狱的解决方案 async/await:用同步的方式去写异步代码

    文章目录 前言 一.引入异步编程 二.常见处理异步编程的几种方式 1.Generator函数 2.Promise函数 3.async/await 总结 前言 这篇文章主要给大家分享一下,自己关于异步编 ...

  6. 理解异步函数async和await的用法

    定义 async作为一个关键字放在函数前面,表示该函数是一个异步函数,异步函数意味着该函数的执行不会阻塞后面代码的执行:而 await 用于等待一个异步方法执行完成: async/await的作用就是 ...

  7. async await

    随着 Node 7 的发布,越来越多的人开始研究据说是异步编程终级解决方案的 async/await.我第一次看到这组关键字并不是在 JavaScript 语言里,而是在 c# 5.0 的语法中.C# ...

  8. java有async和await吗,理解 JavaScript 的 async/await

    2020-06-04 更新 JavaScript 中的 async/await 是 AsyncFunction 特性 中的关键字.目前为止,除了 IE 之外,常用浏览器和 Node (v7.6+) 都 ...

  9. python loop until_python3-asyncio 学习笔记 3 -- run_until_complete

    在笔记1中追踪了 call_soon这中调用方式是如何运行的,这次看一看 run_until_complete是怎么工作的. 还是由一个简单的例子开始: import asyncio async de ...

最新文章

  1. Python 使用CORS跨域资源共享解决flask服务器跨域问题、浏览器同源策略
  2. Java实现找出数组中重复次数最多的元素以及个数
  3. php内存映射,如何用ZwMapViewOfSection将Driver分配的内存映射到App空间?
  4. rotateright_Java Long类rotateRight()方法的示例
  5. Linux中Tomcat 服务的搭建
  6. 如何在支付宝成为增加个人服务器,支付宝支付,服务器如何生成支付订单
  7. 瑞恩面试编程题:找出一个目录下所有的文件
  8. ?请问怎样将excel表格中的时间格式读取为字符串格式?
  9. python400集_今日分享」Python400集全套教程
  10. HTML5矢量实现文件上传进度条
  11. sap事务代码如何收藏_一、SAP中添加一个模块到收藏夹后,显示事务代码
  12. 软件测试(三)--标准的测试用例模板
  13. 谈2010年WEBGAME的发展趋势
  14. 火箭08-09赛程列表
  15. OpenGL第二讲——绘制简单的几何图形
  16. 28个Unix/Linux的命令行神器
  17. 【MATLAB图像处理】图像复原
  18. 知识点3-设计模式与实践
  19. 解除Word的编辑保护【简单版】
  20. mstsc登录xubuntu16.04

热门文章

  1. SQL2000重新装,有文件挂起
  2. 景安服务器怎么重装系统,手把手教你win7镜像怎么重装系统
  3. 安卓平板装MySQL_准备购入一部平板作为学习用具,有推荐的吗?
  4. LabVIEW的第三方驱动(I/O接口设备)
  5. 石英晶体谐振器不良问题归纳
  6. 第一个被赋予公明身份的机器人_机器人被赋予公民身份引发舆论关注
  7. 构造散列表 (20 分)
  8. 构建工具承担了哪些工作?
  9. JavaScript处理大数问题
  10. 支付退款流程设计_Niushop微信支付配置、微信退款配置、微信转账配置操作流程...