async/await 的理解和用法

async/await 的理解和用法async/await是什么async/await是ES7提出的基于Promise的解决异步的最终方案。asyncasync是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。//async基础语法asyncfunctionfun0(){console.log(1);return1;}fun0().then(val=>{conso

大家好,又见面了,我是你们的朋友全栈君。

async/await是什么

async/await 是ES7提出的基于Promise的解决异步的最终方案。

async

async是一个加在函数前的修饰符,被async定义的函数会默认返回一个Promise对象resolve的值。因此对async函数可以直接then,返回值就是then方法传入的函数。

// async基础语法
async function fun0(){ 
   
    console.log(1);
    return 1;
}
fun0().then(val=>{ 
   
    console.log(val) // 1,1
})

async function fun1(){ 
   
    console.log('Promise');
    return new Promise(function(resolve,reject){ 
   
        resolve('Promise')
    })
}
fun1().then(val => { 
   
    console.log(val); // Promise Promise
})

await

await 也是一个修饰符,只能放在async定义的函数内。可以理解为等待。

await 修饰的如果是Promise对象:可以获取Promise中返回的内容(resolve或reject的参数),且取到值后语句才会往下执行;

如果不是Promise对象:把这个非promise的东西当做await表达式的结果。

async function fun(){ 
   
    let a = await 1;
    let b = await new Promise((resolve,reject)=>{ 
   
        setTimeout(function(){ 
   
            resolve('setTimeout')
        },3000)
    })
    let c = await function(){ 
   
        return 'function'
    }()
    console.log(a,b,c)
}
fun(); // 3秒后输出: 1 "setTimeout" "function"
function log(time){ 
   
    setTimeout(function(){ 
   
        console.log(time);
        return 1;
    },time)
}
async function fun(){ 
   
    let a = await log(1000);
    let b = await log(3000);
    let c = log(2000);
    console.log(a);
    console.log(1)
}
fun(); 
// 立即输出 undefined 1
// 1秒后输出 1000
// 2秒后输出 2000
// 3秒后输出 3000

async/await 的正确用法

// 使用async/await获取成功的结果

// 定义一个异步函数,3秒后才能获取到值(类似操作数据库)
function getSomeThing(){ 
   
    return new Promise((resolve,reject)=>{ 
   
        setTimeout(()=>{ 
   
            resolve('获取成功')
        },3000)
    })
}

async function test(){ 
   
    let a = await getSomeThing();
    console.log(a)
}
test(); // 3秒后输出:获取成功
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158149.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 世界十大量化交易模型_如何防止量化模型被窃取

    世界十大量化交易模型_如何防止量化模型被窃取01、股票多空策略股票多空策略(EquityLong/Short),即买一些股票,通过融券的方式去卖空一些股票,然后再用一些股指期货进行对冲。这是国际上主流的HedgeFund所用的量化策略,据知名数据商Eurekahedge的统计数据,在国际对冲基金中长期占比第一(一直超过30%)。比如2011年获得美国量化基金业评比第一名的贝莱德“32Cap全球对冲基金产品”使用的就是经典的多空策略…

    2022年4月19日
  • hadoop集群搭建(超详细版)「建议收藏」

    hadoop集群搭建(超详细版)「建议收藏」1.准备好需要安装的软件虚拟机VMware12.pro操作系统CentOS6.5远程控制虚拟机的终端SecureCRT8.12.在虚拟机中安装CentOS操作系统安装好虚拟机,图形界面如下图创建新的虚拟机,选择自定义(高级),点击下一步虚拟机硬件兼容性默认,浏览需要安装的CentOS6.5镜像文件自定义用户名和密码(用于登录)设置虚…

    2022年10月15日
  • oracle数据库怎么创建连接_eclipse连接数据库代码

    oracle数据库怎么创建连接_eclipse连接数据库代码应用场景:目标数据分散在多个实例下的时候,需要把这些需要的数据整合到同一个数据库下,需要创建数据库连接。用语句创建参考文章:https://blog.csdn.net/hongweibing1/article/details/50623669但是报错:“口令缺失或无效”,选择手动创建。1、找到DatabaseLinks,右键选择“新建”2、进入“创建数据库连接”窗口,勾选“公共”,填写“数据库连接-名称”、“连接到-用户名”、“连接到-口令”、“连接到-数据库”。3、点击左下方的“应用”即

    2022年9月22日
  • FindBugs入门简介(eclipse安装使用实例)

    FindBugs入门简介(eclipse安装使用实例)

    2020年11月12日
  • 基于遗传算法的函数极值求取_遗传算法计算二元函数最大值

    基于遗传算法的函数极值求取_遗传算法计算二元函数最大值前面在《遗传算法通识》中介绍了基本原理,这里结合实例,看看遗传算法是怎样解决实际问题的。有一个函数:f(x)=x+10sin5x+7cos4xf(x)=x+10\sin5x+7\cos4x求其在区间[-10,10]之间的最大值。下面是该函数的图像:在本例中,我们可以把x作为个体的染色体,函数值f(x)作为其适应度值,适应度越大,个体越优秀,最大的适应度就是我们要求的最大值。

    2022年9月13日
  • gzip和gunzip 解压参数「建议收藏」

    gzip和gunzip 解压参数「建议收藏」Linux压缩保留源文件的方法:gzip–cfilename>filename.gzLinux解压缩保留源文件的方法:gunzip–cfilename.gz>filenamegunzip的用法  1.作用gunzip命令作用是解压文件,使用权限是所有用户。2.格式gunzip[-acfhlLnNqrtvV][-s-Linux压缩保留源文件的方法: g…

    2022年9月3日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号