async await promise
async 异步函数,以后可能会用得很广。
1、箭头函数: 没有{ }时不写return 也有返回值
2、Promise : 异步神器,很多异步api都是基于Promise
3、new Promise().then().then().catch() :第一个then触发条件:是 Promise() 实例化时resolve()触发, 第二个及以后的then() 触发条件是前一个then() 执行完成,并且将return值作为下一个then的参数。
4、async: 异步函数
5、await : 后面必须跟Promise对象,若非Promise,则不会拦截后面代码执行。当promise对象resolve过后并且执行完then里面的代码,就执行下一步代码,不resolve不会触发下一行代码执行。
需注意:如果then()中需要异步操作,不会等then中的异步执行完过后再执行下一个then()的函数。原因就是,异步函数中,没有地方给你return给then()回调函数。解决方案是async函数。
也就是说Promise对于异步的帮助 其实很有限,.then()只有第一个有用而已。
const aa = _ => new Promise((res, rej) => { // 设置aa函数返回promise对象
setTimeout(function() {
console.log('1')
res('2')
}, 1000);
})
let bb = async function() {
await aa().then((res) => { // await会等待aa()执行完,并且then代码也执行完,当然,then代码里面的异步操作不会执行。
console.log(res)
setTimeout(function(){
console.log('4') // then中的代码执行完直接进入下一个then,这个then 其实return了undifined
return 'sdf'
}, 2000)
}).then(res => {
console.log(res) // undifined
})
console.log('3')
}
console.log(bb()) // Promise {<pending>}
// console 结果 :
Promise { <pending> }
1
2
undifined
3
4
目标:当A异步任务完成后,继续并发n个B异步任务,使用asnyc函数实现
这儿具体是读文件夹,读完后读文件夹中的所有文件。
const readdir = function (path) { // 读文件函数
return new Promise((res, rej) => {
fs.readdir(path, (err, files) => {
if(err) res(err)
res(files)
})
})
}
const stat = function (path) { // 确认是否是文件夹
return new Promise((res, rej) => {
fs.stat(path, (err, file) => {
if(err) res(err)
file.isDirectory() ? res('dir') :res('file') // 返回类型结果
})
})
}
const getdirs = async function(ctx) {
let sendFiles = []
const files = await readdir(filePath) // 读文件夹
const promises = files.map(function(file){ // 利用map函数特性,返回值组成新的数组,这儿并没有用async函数,map内并不等待一个stat回来后再进行另一个stat,是同时进行的。
return stat(filePath + '/' + file)
.then(res => {
if(res === 'dir') sendFiles.push(file)
})
})
await Promise.all(promises) // 这儿是异步并发的关键,在这个位置等待所有promise对象resolve。
ctx.body = sendFiles
}
async await promise的更多相关文章
- 理解koa2 之 async + await + promise
koa是下一代的Node.js web框架. 我们首先使用koa来实现一个简单的hello world吧!假如目前的项目结构如下: ### 目录结构如下: koa-demo1 # 工程名 | |--- ...
- async await promise 执行时序
先用一个例子来说明async await promise的执行顺序 console.log('start'); async function test(){ console.log('111'); a ...
- Async/await promise实现
An async function can contain an await expression that pauses the execution of the async function an ...
- 8张图让你一步步看清 async/await 和 promise 的执行顺序
摘要: 面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有. 为什么写这篇文章? 说实 ...
- 8 张图帮你一步步看清 async/await 和 promise 的执行顺序(转)
https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651555491&idx=1&sn=73779f84c289d9 ...
- webpack & async await
webpack & async await ES 7 // async function f() { // return 1; // } const f = async () => { ...
- ES6入门十一:Generator生成器、async+await、Promisify
生成器的基本使用 生成器 + Promise async+await Promise化之Promisify工具方法 一.生成器的基本使用 在介绍生成器的使用之前,可以简单理解生成器实质上生成的就是一个 ...
- async包 ES6 async/await的区别
最基本的async 包 ApCollection.find({}).toArray(function (err, aps) { var num = 0; async.whilst( function ...
- async/await与promise(nodejs中的异步操作问题)
此文只是粗略介绍使用方法,欲了解核心概念请参考官方文档或其他资料. 举例写文章详情页面的时候的一个场景:首先更改文章详情中的 PV,然后读取文章详情,然后根据文章详情中文章 Id 查阅该文章评论和该文 ...
随机推荐
- form表单数据封装成json格式并提交给服务器
1.jsp代码,form表单: <form action="#" id="costForm"> <input type="hidde ...
- PostgreSQL索引描述
索引方式:唯一索引,主键索引,多属性索引,部分索引,表达式索引. 索引类型:B-Tree,Hash,GiST,GIN以及表达式索引 PostgreSQL所有索引都是“从属索引”,也就是说,索引在物理上 ...
- git学习资料包
1.廖雪峰老师的git教程:https://www.liaoxuefeng.com -----点击“GIT教程”开始学习 2.菜鸟教程git学习:http://www.runoob.com/gi ...
- 使用fastdfs-zyc监控FastDFS文件系统
1.安装jdk运行环境 jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 此处我使用的jdk7U99 ...
- 智能合约语言 Solidity 教程系列3 - 函数类型
Solidity 教程系列第三篇 - Solidity 函数类型介绍. 写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解,如果你还不了解,建议你先看以 ...
- JAVA实现同域单点登录
所用技术: SSM MySQL Maven Tomcat8.0 同域单点登录详细步骤如下: 1.首先写一个登录界面(隐藏域为暂存地址) 2.判断用户密码是否正确,正确则添加cookie,否则返回错误页 ...
- Mysql的安装和图形化界面的使用
访问mysql网址:https://dev.mysql.com/ 下面需要登录你的oracle账号进行下载就好~ 下载之后是一解压包形式存在的~ 解压之后的文件 这里我新建了my.ini的文件~将my ...
- hdu 4869 Turn the pokers (思维)
Turn the pokers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 此地址使用了一个通常用于网络浏览以外目的的端口。出于安全原因,Firefox 取消了该请求。
火狐无法访问本机IIS部署的网站,弹出:此地址使用了一个通常用于网络浏览以外目的的端口.出于安全原因,Firefox 取消了该请求 的解决办法 关于火狐浏览器访问本机IIS部署的网站弹出"此 ...
- ligerUI---ligerGrid分页排序的使用(从后台获取数据显示)
写在前面: 最近项目的前框框架用的是ligerUI,里面用到了ligerGrid表格,下面就来说说从后台获取数据并在前台页面进行完美展示.啊哈哈哈..(天啦,坐我旁边的丽姐貌似炒股 一个月可以搞几十万 ...