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. java 笔记整理

    在19寒假对java基础进行自学,总结的笔记整理出来 ==================================================== 排序查找 冒泡排序法1.一共会比较数组元 ...

  2. javascript按键盘上/右/下/左箭头加速运动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. c++多线程基础1(thread)

    std::thread 在 <thread> 头文件中声明,因此使用 std::thread 时需要包含 <thread> 头文件. thread 构造函数: default ...

  4. 滴滴插件化方案 VirtualApk 源码解析

    那么其中的难点很明显是对四大组件支持,因为大家都清楚,四大组件都是需要在AndroidManifest中注册的,而插件apk中的组件是不可能预先知晓名字,提前注册中宿主apk中的,所以现在基本都采用一 ...

  5. maven项目运行找不到类的错误

    Maven项目 eclipse工具 错误: [INFO] -------------------------------------------------------------[ERROR] CO ...

  6. [译文]Casperjs1.1.0参考文档-安装

    安装 Casperjs能被安装在mac osx,windows 和大多数linux版本 依赖项 PhantomJS1.82及以上 Python2.6及以上(很多人忘了安装python导致安装失败) 1 ...

  7. [HAOI2018]反色游戏

    [Luogu4494] [BZOJ5303] [LOJ2524] LOJ有数据就是好 原题解,主要是代码参考 对于每一个联通块(n个点),其他的边一开始随便选,只需要n-1条边就可以确定最终结果. 所 ...

  8. asp.net 同时执行js事件和代码事件 导出 excel

     onclick="return bnQuery_onclick()" onserverclick="bnQuery_ServerClick"   public ...

  9. POJ - 3263 差分+前缀和

    只需不断维护相对值的前缀就能得到解 这种思想第一次是在树状数组区间更新那里看到的,由于题目要求是1~n所以直接可以用前缀和维护 注意不能直接-1 +1 还有POJ的数据..要不是书里有提谁知道会这么毒 ...

  10. 在Linux系统下用dd命令制作ISO镜像U盘启动盘

    http://os.51cto.com/art/201510/494762.htm 首先在 Linux 系统中打开终端,确认 U 盘路径: sudo fdisk -l 使用 dd 命令,格式如下: s ...