文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Node.js中async和await关键字如何使用

2023-07-02 15:10

关注

本篇内容主要讲解“Node.js中async和await关键字如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Node.js中async和await关键字如何使用”吧!

async 和 await 关键字

async 和 await 是 ES2017 中提出来的,async 和 await 两个关键字的出现,简化的 Promise 的使用。

async 关键字

async关键字使用比较简单,所以 async 的使用注意以下三点即可 :

// async 用于修饰一个 function//     1. async 修饰的函数,总是返回一个 Promise 对象//     2. 函数的返回值,将自动包装在 resolve 的 promise 中// 1. async 修饰的函数,总是返回一个 Promise 对象async function fn() {    // 2. 函数的返回值,将自动包装在 resolve 的 promise 中    return '哈哈哈';}// 以后看一下博客文章之类的东西,里面会有一些变量使用 :foo 和 bar , 无意义;const foo = fn();console.log(foo);foo.then(res => {    console.log(res);});// 注意: async修饰的函数被称为异步函数,可他不是异步执行;console.log('我是最后一行代码');

await关键字

await关键字比较繁琐,注意点比较多。首先,await 只能出现在 async 函数内,await 让 JS 引擎等待直到promise完成并返回结果,语法:

let value = await promise对象; // 等待promise对象的结果,然后将结果赋值给 value

由于await需要等待promise执行完毕,所以 await会 暂停函数的执行,但不会影响其他同步任务。

所以,await总结如下四点:

// 定义一个方法,为的就是返回一个 Promise 对象,让下面的await使用;async function getPromise() {    return '哈哈哈';}console.log(1);// 1.await只能出现在async修饰的函数中!async function fn() {    console.log(2);    // 2.await后面跟随的是一个promise对象;    // 3.await返回的是: Promise对象中的then()中的回调函数中的参数res;    const str = await getPromise();    console.log(str);    // 4.await能停止代码执行,让后面的同步代码,先执行;    console.log(3);}// 调用fn();console.log(4);// // 以前用法: // axios().then(res => {//     res.data.map()// });// // 以后用法: // async function name() {//     let res = await axios();//     res.data.map();// }

async 和 await 解决回调地狱

// async 和 await 解决回调地狱也要用到 then-fs ,因为他直接返回 Promise 对象;// 导入 then-fsimport thenFs from 'then-fs';// await 一定要出现在异步函数中async function fn() {    let str1 = await thenFs.readFile('./txt/a.txt', 'utf8');    console.log(str1);    let str2 = await thenFs.readFile('./txt/b.txt', 'utf8');    console.log(str2);    let str3 = await thenFs.readFile('./txt/c.txt', 'utf8');    console.log(str3);}// 调用函数fn();

JS执行机制(事件循环)

微任务和宏任务

在ES3 以及以前的版本中,JavaScript本身没有发起异步请求的能力,也就没有微任务的存在。在ES5之后,JavaScript引入了Promise,这样,不需要浏览器,JavaScript引擎自身也能够发起异步任务了。  Tick会触发浏览器渲染,Promise不会触发,所以更加轻量级,多使用;

宏任务

(macro)task,可以理解是每次执行栈执行的代码就是一个宏任务

微任务

微任务(microtask)是宏任务中的一个部分,它的执行时机是在同步代码执行之后,下一个宏任务执行之前。

总结起来,微任务有:

宏任务和微任务执行机制

JS优先执行同步任务,然后执行微任务,最后执行宏任务。

总结:Promise中的then()比大部分异步代码,优先执行!

// 结论: 如果同一时间既有宏任务又有微任务触发,那么优先执行微任务;//     宏任务是宿主发起的会触发重构,比较浪费资源,后执行;//     微任务是js解释器发起的不会触发重构,比较节省资源,先执行;// 宏任务setTimeout(() => {    //执行后 回调一个宏事件    console.log('1')}, 0)// 同步代码console.log('2');// 同步代码new Promise((resolve) => {    console.log('3');    resolve()// 微任务}).then(() => {    console.log('4');// 微任务}).then(()=>{    console.log('5')})// 同步代码console.log('6')// 2  3   6   4   5   1

到此,相信大家对“Node.js中async和await关键字如何使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯