function fn(){
  return "aa";
  }
  console.log(fn())
// 如果直接写个函数return一个值,那么打印的肯定就是aa
    async function fn(){
return "aa";
}
console.log(fn())
// 使用async就是在函数前面加一个async,这样打印出来的就是一个promise对象,而不是之前那个具体的值

    async function fn(){
return "aa";
}
console.log(fn()) fn().then(function(data){
console.log(data)  // aa
});
// 如果想要获取fn()的值,就要用then()方法去获取

awiat必须在使用async的情况下才能使用,它的作用是阻断主函数的执行,等待异步执行的结果返回后才会向下继续执行。

    function fn(){
return new Promise((resolve)=>{
setTimeout(()=>{
console.log(1111)
resolve();
},2000);
});
} async function fn1(){
await fn();
setTimeout(()=>{
console.log(2222);
},1000);
}
fn1();
// 执行结果:2秒后打印1111(因为await的阻断作用,它会先执行fn函数),再过1秒打印2222(执行完fn函数后,fn函数要有reslove()才能继续向下执行)。

多个异步同时执行

    function fn(){
return new Promise((resolve)=>{
setTimeout(()=>{
console.log(1111)
resolve();
},3000);
});
}
function fn1(){
return new Promise((resolve)=>{
setTimeout(()=>{
console.log(2222)
resolve()
},1000);
});
}
function fn2(){
return new Promise((resolve)=>{
setTimeout(() => {
console.log(3333)
resolve()
},1000);
});
} async function fn3(){
await fn();
await fn1();
await fn2();
console.log(4444)
}
fn3();
// 执行结果:3秒后打印1111(因为定时器设置为3秒),再过1秒打印2222(受await阻断影响,必须要在fn()执行完后才能执行,同时如果fn()没有返回结果,就是说没有reslove()的话,那么下面的代码将不会执行),
// 再过1秒打印3333和4444(打印4444是瞬间执行,如果fn2()没有reslove(),则不会打印4444)。

async和await的用法的更多相关文章

  1. C#多线程编程(2)-- async,await基本用法

    上一章我简单介绍了异步编程的基本方法,推荐使用的方式是Task.Task是对线程池的封装,并且可以对Task使用async和await关键字.这两个关键字的使用非常简单,那么这两个关键字究竟起什么作用 ...

  2. C# 中的Async 和 Await 的用法详解

    众所周知C#提供Async和Await关键字来实现异步编程.在本文中,我们将共同探讨并介绍什么是Async 和 Await,以及如何在C#中使用Async 和 Await. 同样本文的内容也大多是翻译 ...

  3. async 和 await 的用法示例

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. Promise以及async和await的用法

    Promise是一个异步加载的方式,处理时使用new Promise返回一个对象,该对象可以调用then方法,then方法中有两个参数,第一个参数是加载成功时执行,第二个参数是加载失败时执行,then ...

  5. vue中异步函数async和await的用法

    整理的不错,收藏一下 http://blog.sina.com.cn/s/blog_13d06fc1f0102wzfr.html

  6. Thread、ThreadPool、Task、Parallel、Async和Await基本用法、区别以及弊端

    多线程的操作在程序中也是比较常见的,比如开启一个线程执行一些比较耗时的操作(IO操作),而主线程继续执行当前操作,不会造成主线程阻塞.线程又分为前台线程和后台线程,区别是:整个程序必须要运行完前台线程 ...

  7. async和await用法

    原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...

  8. async和await用法(Task)

    原文:async和await用法 要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await, ...

  9. async和await浅析

    要理解async和await的用法,首先要了解Task相关知识,这里不做说明,因为这不是本文的重点. 如果你已经对Task很了解,那么如何使用async和await,在此主要总结了以下三点: 只有在a ...

随机推荐

  1. Ubuntu18.4编译pmon,缺少makedepend和pmoncfg

    提示makedepend找不到解决方法:$ apt-cache search makedependxutils-dev - X Window System utility programs for d ...

  2. nodejs插件化框架——minimajs

    本文介绍我开发的一个JavaScript编写的插件化框架——minimajs,完全开源,源码下载地址:https://github.com/lorry2018/minimajs.该框架参考OSGi规范 ...

  3. 解决office365无法登录以及同步的问题

    解决office365无法登录以及同步的问题 You better need to test them one by one. You better need to test them one by ...

  4. 原生js实现append()方法

    一.在使用jquery时,append() 方法在被选元素的结尾(仍然在内部)插入指定内容 使用方法:$(selector).append(content),content为必需的.规定要插入的内容( ...

  5. OAuth2.0授权码模式

    OAuth2.0简单说就是一种授权的协议,OAuth2.0在客户端与服务提供商之间,设置了一个授权层(authorization layer).客户端不能直接登录服务提供商,只能登录授权层,以此将用户 ...

  6. Mongodb的常用语句

    模糊查询  regex(".*?\\"+questionContent+".*") String questionContent = "需求" ...

  7. 常用的排列、组合、阶乘函数 MATLAB

    1.求n的阶乘,方法如下:a.factorial(n)b.gamma(n+1)c.v='n!'; vpa(v) 2.求组合(数),方法如下:a.combntns(x,m)    列举出从n个元素中取出 ...

  8. 钉钉SDK使用。

    (1)到 https://open-doc.dingtalk.com/microapp/faquestions/vzbp02 下载SDK (2)引入 using DingTalk.Api; using ...

  9. 什么是code-Behind技术?

    code-Behind技术就是代码隐藏(代码后置),在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建. 比如分工,美工和编程的可以个干各 ...

  10. win10 net framework 3.5提示错误代码0x800f081f

    重装了win10系统,碰到以下几个问题 1.安装本地iis -启动或关闭windonws功能- 安装net framework 3.5的时候 提示错误代码0x800f081f 2.安装SqlServe ...