首页 > 其他分享 >js 异步 任务 题目解析(chatgpt bug了?)

js 异步 任务 题目解析(chatgpt bug了?)

时间:2023-07-05 22:02:26浏览次数:35  
标签:async2 输出 async1 console log js chatgpt 执行 bug

最近遇到一道题如下,求输出结果
感觉还是蛮有意思的,找chatgpt做了一下

我是题

async function async1(){
    console.log('1');
    await async2();
    console.log('2');
}
async function async2(){
    console.log('3');
}
console.log('4')
setTimeout(function(){
    console.log('5')
}, 0);

async1();

new Promise(function(resolve){
    console.log('6');
    resolve();
}).then(function(){
    console.log('7')
});
console.log('8')

结果

4 1 3 6 8 2 7 5

解析如下

首先,执行同步代码console.log('4'),输出4。
然后,调用async1()函数,执行异步函数async1()。输出1,并且遇到await async2()语句,执行异步函数async2()。
接着,执行异步函数async2(),输出3。
回到async1()函数,继续执行,输出2。
然后,执行console.log('6')输出6。
继续执行同步代码console.log('8'),输出8。
然后,执行Promise构造函数,输出7。
最后,执行setTimeout中的回调函数,输出5。

但是这就有点尴尬了自己的解释和结果并不符合

我的理解是

首先,执行同步代码console.log('4'),输出4。
然后,调用async1()函数,执行异步函数async1()。输出1,并且遇到await async2()语句,执行异步函数async2()。
接着,执行异步函数async2(),输出3。
回到async1()函数,不继续执行,把所有代码块(命名为A)推到微任务队列里面去,等待执行
然后,执行console.log('6')输出6。
继续执行同步代码console.log('8'),输出8。
当前任务块代码执行完毕,开始执行微任务A 输出2
然后,执行Promise构造函数,输出7。
最后,执行setTimeout中的回调函数,输出5。

疑问

1 我曾经看书,忘了哪一个,js任务队列就一个,不存在微任务队列,宏任务完成红,会检查队列中微任务执行完毕,是否是这样滴

其他

1 await会把后面的代码包装,当前语句的代码执行完成后推到微任务
2 js nodejs 时间循环机制不太一样

标签:async2,输出,async1,console,log,js,chatgpt,执行,bug
From: https://www.cnblogs.com/listen80/p/17529912.html

相关文章

  • 使用了下chatgpt3.0和chatgpt4.0的区别
    chatgpt4.0的理解能力更强了以下地址即可试用  ......
  • js如何动态清除form表单中input款下的错误信息
    form表单<formaction=""method="post"novalidateid="myform">{%csrf_token%}{%forforminform_obj%}<divclass="form-group"><labelfor="{{form.i......
  • 解决Flutter编译一直显示Running Gradle task 'assembleDebug'
    该问题由Gradle的Maven仓库在国外访问受限引起,使用阿里云的镜像仓库地址替代解决1.修改FlutteSDK目录下的Flutter打包配置文件flutter.gradle一般位于flutter\packages\flutter_tools\gradle\flutter.gradle1buildscript{repositories{//google()......
  • bugly iOS符号表上传
    1、首先给电脑安装java环境链接 下载提示需要oracle注册等下就行了2、下载安装之后java-version命令可以测试是否安装成功3、下载bugly符号表工具然后进入到 buglyqq-upload-symbol终端目录下 执行如下命令即可上传符号表java-jarbuglyqq-upload-symbol.jar......
  • 前端文件流下载--mockjs污染全局问题
    参考文章https://blog.csdn.net/daotian2016/article/details/123670179 项目场景:项目场景:VUE工程,做了一个代码自动生成可以导出zip的功能。问题描述导出的zip文件打开提示“不可预料的压缩文件末端”,文件打不开。 exportfunctiondownLoadZip(str,filename){ varurl=......
  • API6中JS UI实现富文本组件居右显示
    ​ 【关键字】RichText、富文本组件、API6、JS UI、居右显示 【关键代码如下】index.hml<divclass="container"><divclass="top"><richtext@start="onLoadStart"@complete="onLoadEnd"class="rich">{{con......
  • VUE 2项目使用vue-json-excel导出数据
    记录一下后端返回的json数据转成excel导出这里外面使用的是vue-json-excel1.安装包npminstallvue-json-excel2.组件中使用<download-excelclass="btnbtn-default":data="json_data":fields="json_fields"worksheet="MyWorksheet"name=&......
  • MySQL数据库8.0.29-8.0.31版本使用 INSTANT 算法新增字段bug
    xxx下发MySQL数据库共性隐患排查通知,要求统一排查MySQL数据库8.0.29及以后版本使用INSTANT算法新增字段后期变更回滚可能导致数据库宕机的隐患,排查方法及整改方法详见下表和附件。请各分支()数据库运营人员集中排查隐患,及时整改。 隐患概述MySQL数据库8.0.29及以后版本......
  • js 实现 EventBus 事件总线
     EventBus一般用做单例,EventEmiter一般在组件或模块内使用<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0">&l......
  • egg.js
    引入joi进行参数校验按照依赖:npminstalljoi基本使用:constJoi=require('joi');constaddCatalogSchema=Joi.object({catalog:Joi.string().required(),});module.exports={addCatalogSchema,};//使用constctx=this.ctx;const{catalog}=ct......