async/await 继发执行与并发执行,看如何控制

两个异步函数 foo bar

function foo() {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('foo:' + new Date().toLocaleString())
resolve('foo')
}, 2000)
})
} function bar() {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('bar:' + new Date().toLocaleString())
resolve('bar')
}, 2000)
})
}

继发执行

//继发执行
async function main() {
console.log('beginTime:' + new Date().toLocaleString())
var foostr = await foo();
console.log(new Date().toLocaleString())
console.log(foostr);
var barstr = await bar();
console.log(new Date().toLocaleString())
console.log(barstr);
console.log('endTime:' + new Date().toLocaleString())
} //继发执行
async function main2() {
let docs = [foo, bar];
console.log('beginTime:' + new Date().toLocaleString())
for (let doc of docs) {
var str = await doc();
console.log(new Date().toLocaleString())
console.log(str);
}
console.log('endTime:' + new Date().toLocaleString())
}

并发执行

//并发执行
async function async_main() {
console.log('beginTime:' + new Date().toLocaleString())
let [get_foo, get_bar] = await Promise.all([foo(), bar()]);
console.log(new Date().toLocaleString());
console.log(get_foo);
console.log(get_bar);
console.log('endTime:' + new Date().toLocaleString())
} //并发执行
async function async_main4() {
let docs = [foo(), bar()];
console.log('beginTime:' + new Date().toLocaleString())
for (let doc of docs) {
var str = await doc;
console.log(new Date().toLocaleString())
console.log(str);
}
console.log('endTime:' + new Date().toLocaleString()) } //并发执行
async function async_main2() {
console.log('beginTime:' + new Date().toLocaleString())
let fooPromise = foo();
let barPromise = bar();
let get_foo = await fooPromise;
console.log(new Date().toLocaleString());
console.log(get_foo);
let get_bar = await barPromise;
console.log(new Date().toLocaleString());
console.log(get_bar);
console.log('endTime:' + new Date().toLocaleString())
} //并发执行 但是 会先执行 endTime
async function async_main3() {
let docs = [foo, bar];
console.log('beginTime:' + new Date().toLocaleString())
docs.forEach(async (val) => {
var str = await val();
console.log(new Date().toLocaleString())
console.log(str);
})
console.log('endTime:' + new Date().toLocaleString())
}

node.js async/await 继发执行与并发执行的更多相关文章

  1. [node.js] async/await如何优雅处理异常?

    node.js的世界,从callback开始,不会止于async. 所有人都在骂为什么不能完全进化,其实我感觉这就是老外的细心,为了承上.这也就是为什么async其实就是promise一样,假如不是一 ...

  2. 关于async/await、promise和setTimeout执行顺序

    先来一道关于async/await.promise和setTimeout的执行顺序的题目: async function async1() { console.log('async1 start'); ...

  3. js async await 终极异步解决方案

    既然有了promise 为什么还要有async await ? 当然是promise 也不是完美的异步解决方案,而 async await 的写法看起来更加简单且容易理解. 回顾 Promise Pr ...

  4. js async/await

    一.async 带async关键字的函数,是声明异步函数,返回值是promise对象,如果async关键字函数返回的不是promise,会自动用Promise.resolve()包装. async f ...

  5. [转] js async await 终极异步解决方案

    阅读目录 回顾 Promise async await 字面理解 async.await 如何执行 await 操作符 总结 既然有了promise 为什么还要有async await ? 当然是pr ...

  6. Node.js——Async

    一:流程控制 为了适应异步编程,减少回调的嵌套,我尝试了很多库.最终觉得还是async最靠谱. 地址:https://github.com/caolan/async Async的内容分为三部分: 流程 ...

  7. 【原创】cs+html+js+css模式(七): 顺序执行与并发执行问题,IIS7及其以上版本的抛错问题解决

          在进行开发的过程中,针对于这种模式,我们继承的IRequiresSessionState,这种对于我们的同一个IIS的执行中是顺序执行即一个ajax请求处理完成后,才能执行下一个ajax, ...

  8. node.js async 几个函数

    async.waterfallasync.seriesasync.parallelasync.auto http://my.oschina.net/huangsz/blog/176203http:// ...

  9. node.js:怎样同时执行多条SQLs,且只有一个回调

    本文主要介绍开源node.js库mysql-queries,其可以同时执行多条SQLs,且只有一个回调.同时抛砖引玉,与大家交流node.js开发经验. node.js很大的特点就是事件驱动.非阻塞和 ...

随机推荐

  1. Druid连接池默认配置和坑

    一.公司默认配置 ds_0: !!com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.jdbc.Driver url: ...

  2. model中的Meta类

    通过一个内嵌类 "class Meta" 给你的 model 定义元数据, 类似下面这样: class Foo(models.Model): bar = models.CharFi ...

  3. CAP理论中的P到底是个什么意思

    在CAP理论中,C代表一致性,A代表可用性(在一定时间内,用户的请求都会得到应答),P代表分区容错.这里分区容错到底是指数据上的多个备份还是说其它的 ? 我感觉分布式系统中,CAP理论应该是C和A存在 ...

  4. 用Hadoop,还是不用Hadoop?

    本文由 伯乐在线 - Lex Lian 翻译.英文出处:Anand Krishnaswamy.欢迎加入翻译小组. Hadoop通常被认定是能够帮助你解决所有问题的唯一方案. 当人们提到“大数据”或是“ ...

  5. go的三个常用命令go run go build go install

    go的三个常用命令 go run go build go install 命令源码文件:含有 main函数 的文件 库源码文件:不包含 main函数 的文件, 主要用于编译成静态文件.a供其他包调用 ...

  6. Exadata 18.1新特性--计算节点升级增强

    新的计算节点升级增强能大幅缩短升级花费的时间,最快能减少40%的时间,具体的增强主要体现在以下方面: 1.计算节点操作系统的备份工作. 以前计算节点操作系统的备份工作是在正式升级之前执行,在滚动升级过 ...

  7. eclipse 与my eclipse区别,IDE

    ecilpse:是一个平台,通过相关插件可以作为c/c++,java,J2EE,PHP,python,Flex等的IDE IDE:集成开发环境(IDE,Integrated Development E ...

  8. Android LayerDrawable资源应用

    1.介绍 (1)常识 (2)特点 2.实例演示 <1>新建drawable文件 app--->src---->main---->res---->drawable , ...

  9. rest-assured的默认值与Specification重用

    一.默认值 rest-assured发起请求时,默认使用的host为localhost,端口为8080,如果你想使用不同的端口,你可以这样做: given().port(80)...... 或者是简单 ...

  10. WPF 布局

    WPF布局原则 WPF窗口只能包含单个元素,为在WPF窗口中放置多个元素并创建更贴近使用的用户界面,需要在窗口上放置一个容器,然后在这个容器中添加其他元素 遵循以下几条重要原则 不应显式设定元素(如控 ...