首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么JS异步函数既不显示打印也不显示错误?

JS异步函数既不显示打印也不显示错误的原因是因为异步函数的执行是非阻塞的,它会在后台进行处理而不会阻塞主线程的执行。这意味着异步函数的执行结果不会立即返回,而是在某个未来的时间点返回。

当我们调用一个异步函数时,它会立即返回一个Promise对象,而不会等待异步操作的完成。我们可以通过Promise的then()方法或async/await语法来处理异步函数的返回结果。

在异步函数执行过程中,如果发生错误,它不会抛出异常,而是将错误信息封装在Promise对象中,并通过reject()方法传递给调用者。我们可以通过Promise的catch()方法或try/catch语法来捕获和处理这些错误。

由于异步函数的执行是在后台进行的,它不会直接影响到主线程的执行。因此,它不会在控制台显示打印信息或错误信息。如果我们希望在异步函数执行过程中打印信息或处理错误,我们需要显式地在异步函数内部进行相应的操作,例如使用console.log()打印信息或使用try/catch捕获错误。

总结起来,JS异步函数不显示打印和错误是因为它的执行是非阻塞的,结果不会立即返回,而是通过Promise对象传递给调用者。我们需要显式地处理打印和错误,而不是依赖于默认的控制台输出。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Console 模块解读及简单实现

文件 Logger 模块基本使用 日志输出至终端 log、info、error、warn、clear 日志输出至文件 trace 打印错误堆栈 dir 显示一个对象的所有属性和方法 time 和 timeEnd...:188:16) at bootstrap_node.js:609:3 trace打印错误堆栈 logger.trace('测试错误'); Trace: 测试错误 at Object....:201:16) at bootstrap_node.js:626:3 dir显示一个对象的所有属性和方法 depth - 表示最大递归的层数。...console 既不是总是同步的,总是异步的。是否为同步取决于链接的是什么流以及操作系统是 Windows 还是 POSIX: 注意: 同步写将会阻塞事件循环直到写完成。...同时另一个疑问开启一个 http server 为什么进程没有退出?参考下文章 Node.js 为什么进程没有 exit?。

1.1K10

Promise的使用方法

一、Promise有以下三种状态: pending: 初始状态,既不是成功,不是失败状态 , ( 等待中 , 或者进行中 , 表示还没有得到结果 ) fulfilled: 意味着操作成功。...这两个函数就是就是「回调函数」 resolve函数的作用:在异步操作成功时调用,并将异步操作的结果,作为参数传递出去; reject函数的作用:在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去...data为:字符串‘成功’ 或者字符串‘失败’ 如果异步操作获得了我们想要的结果,那我们将手动调用resolve函数,在then的第一个作为参数的匿名函数中可以获取数据,如果我们得到了错误的结果,调用reject...打印结果 3)如果then传入处理函数,通过处理函数显示的return了一个新的Promise,那么返回这个显示的Promise对象...打印结果↑ 可以捕获.catch以上的任一错误(前提是:.then中的onRejected函数没有做任何处理) 补充~: 1).catch与.then中的onRejected函数冲突,如果前面.then

1K10

50道JavaScript详解面试题,你需要了解一下

答案是输出为10,因为将对象传递给函数时的对象相似,仅传递其值,而传递对内存位置的实际引用。这就是为什么更改仅影响函数范围内的参数的原因。 3、控制台输出是什么?...10、以下是用于打印“用户名”的有效语法? 以下语法是有效的,因为我们正在将异步函数的返回值传递给callback。 11、typeof和instanceof之间没有什么区别?...16、getElementsByTagName是JavaScript函数吗? ,getElementsByTagName是一个Web API函数,就像普通的JS函数一样可用。...,RegExp具有许多属性,例如.flags和.global。 31、控制台输出是什么? 控制台输出将为10和5,因为该函数在Promise中没有异步的内容,并且Promise同步解析。...32、在浏览器下一次重画显示内容之前,哪个函数会执行指定的代码块? requestAnimationFrame()。 33、为什么在导入模块时使用别名?

3.5K40

Node入门教程(5)第四章:global 全局变量

注意:全局的 console 对象的方法既不总是同步的(如浏览器中类似的 API) 全局的console对象可以再 node 中任何地方直接调用。接下来看看它的常用方法。...打印错误消息和警告信息 语法:console.error([data][, ...args]) error方法的使用同 log方法,所以赘述,我们一般用此方法打印错误消息,一般用log方法打印普通消息...第二个参数options是设置打印的配置项: showHidden - 如果为 true,则该对象中的不可枚举属性和 symbol 属性显示。默认为 false。...说明 实例 打印堆栈跟踪在代码 console.trace([message][, ...args]) 计数器的显示标签 console.count([label]) 重置指定 label 的内部计数器...Node.js 不能保证回调被触发的确切时间,不能保证它们的顺序。 回调会在尽可能接近所指定的时间上调用。

1.2K40

嚯!原来这样就可以提升页面首屏的渲染性能

这就是为什么 JS 会阻塞解析的原因。 完成所有解析后,浏览器将构建文档对象模型 (DOM) 和级联样式表对象模型 (CSSOM)。 将它们组合在一起得到渲染树。...页面的不显示部分不会进入渲染树,因为它只包含绘制页面所需的数据。 倒数第二步是将渲染树进行布局, 这个阶段称为回流:就是计算每个渲染树节点的每个位置及其大小的地方。 最后一步是绘制。...例如,它应该从你的后端服务中删除所有注释(但不是源代码)以及每个包含附加信息的字符(例如 JS 中的空白字符)。 完成后,我们剩下的可以是文本字符串。...例如,如果你将 media="print" 属性添加到引用样式以打印页面的样式标记,则这些样式不会在不打印媒体时干扰你的关键渲染路径。...因此,最好以首先加载所需样式和脚本的方式重新排列与渲染相关的所有内容,而其他所有内容都停止(既不解析渲染)。

73740

使用mocha编写node服务单元测试

= null, '函数正常入参执行错误') 就是判断res是否不等于null。当第一个入参的表达式结果为false时,表示不符合预期,这是测试用例不通过,会打印出第二个入参的提示语。...异步逻辑 上述的单测例子里,被测试的函数只有同步逻辑,而在js中,异步逻辑无处不在。那么对于异步逻辑需要怎么测试呢?...done it方法的第二个入参是一个执行函数,我们可以给这个函数传入一个done方法,等到异步返回后再去显示地调用done方法,告诉mocha该测试用例执行完毕。...当我们的异步逻辑耗时较长时,需要手动地调整这个超时时间。 我们可以在mocha启动时传入timeout参数,或者在测试用例中显示声明该测试用例的超时时间。...我们可以让替换函数主动抛出错误,来测试调用它的函数是否可以正确处理异常: it('测试db操作失败', async function(){ const stub = sinon.stub(db,

3.9K20

js培训课程_java前端培训班

这也就解释了为什么都说js是解释执行的,读一句执行一句,但是实际上js中还没执行到的代码语法错误导致整个js不会执行的问题。...在浏览器中,多个标签中的js代码,是分段编译的,但是全局对象是共享的(某一个标签中的语法错误不会导致另一个中的代码执行)。...比如java、在ide中为对象的一个不存在的属性赋值能在编译时检查出错误Js是动态语言。对象的某个属性是否存在,在编译时无法确定。这导致某些错误要到运行时才可能发现。...词法作用域的函数中遇到既不是形参不是函数内部定义的局部变量的变量时,去函数定义时的环境中查询。 动态域的函数中遇到既不是形参不是函数内部定义的局部变量的变量时,到函数调用时的环境中查。...动态作用域由于变量的作用范围很难确定(如果变量既不是形参不是函数内部定义的局部变量),很难知道某个变量具体是指向哪个对象,所以现代编程都不用动态作用域。

1.3K10

详解 JS 中的事件循环、宏微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项

Promise 提供了一种处理异步操作的方法,使得异步代码易于编写和理解。 Promise 的基本概念 Promise 对象有三种状态: Pending(等待中):初始状态,既不是成功,不是失败。...错误处理:通过 .catch() 方法,可以集中处理多个异步操作中的错误。 并行处理:Promise.all() 方法允许并行执行多个异步操作,并等待所有操作完成。...; }, 1000); 这个例子会先打印 "Hello",然后大约1秒后打印 "World!"...Vue.js使用了 process.nextTick,或者更具体地说,它使用了与之类似的异步延迟功能。...为什么要销毁定时器? 我是 fx67ll.com,如果您发现本文有什么错误,欢迎在评论区讨论指正,感谢您的阅读!

7610

从零开始学 Web 之 JavaScript(一)JavaScript概述

为什么直接把JavaScript定为标准呢?因为JavaScript是网景的注册商标。不过大多数时候,我们还是用JavaScript这个词。...以上简介来自:廖雪峰的官方网站 2、JS作用 验证表单(以前的网速慢) 页面特效(PC端的网页效果) 移动端(移动web和app) 异步和服务器交互(AJAX) 服务端开发(nodejs) 3、语言类型...外链式:   src=”外部js文件路径” 7、JS基础知识 输出语句 console.log("内容"); // 在控制台打印输出内容 alert("内容");...: 在一对script的标签中有错误js代码,那么该错误的代码后面的js代码不会执行。...如果第一对的script标签中有错误,不会影响后面的script标签中的js代码执行。

1.3K20

你不知道的前端异常处理(万字长文,建议收藏)

尽管 JS 是解释语言,依然存在编译阶段,这是必然的,因此自然会有编译异常。 总的来说,编译异常可以在代码被编译成最终代码前被发现,因此对我们的伤害更小。...❝不明白为什么调用栈是空的同学可以看下我之前写的《一文看懂浏览器事件循环》[4] ❞ 而 try catch 的作用仅仅是捕获当前调用栈的错误(上面异常传播部分已经讲过了)。...因为错误抛出的时候, 调用栈中包含这个 catch 语句,而仅仅在执行fs.readFile的时候才会。...比如异步不要去吞没异常。下面的代码是不好的,因为它吞没了「它不能处理的」异常。...不仅仅是 API,编程模型发生了翻天覆地的变化,不然函数不会这么多年没有得到普及了。 ❝不熟悉函数编程的可以看看我之前写的函数式编程入门篇[6]。 ❞ 如果才能彻底消除异常呢?

76820

实现Promise,有手就行巨详细,不看血亏

不会报错,会修改Promise的状态为rejected,然后返回错误原因 总结:原生Promise只要有错误,都会修改状态为rejected, 如果有then捕获错误,就会把错误信息通过reject...,捕获不到错误,会报错 // executor函数里面的代码有错误,但是没有被then的reject捕获,会修改Promise的状态为reject,并抛出错误 var p = new Promise(...再判断抛抛出错误 // 步骤: // 1,捕获到错误,存到exception; // 2,遇到定时器宏任务,把定时器的回调放进宏任务队列,等待函数执行栈全部执行完再执行...,比如resolve方法放在一个异步函数(比如,定时器)的回调里,而又因为js的事件机制,不会等到这个异步函数执行完成再去继续往下执行,他回将这个异步函数的回调放到任务队列里,等主线程执行栈执行完成了再去执行这个任务队列里面的回调...,因此,如果resolve方法如果在异步函数里,js就会将他放入任务队列,然后继续往下执行 因此,当js执行完 _Promise.executor后,继续往下执行(遇到then(),这里注意,是遇到then

64210

JavaScript异步编程

、ajax,为什么会用到异步呢,就拿业务来说,若前端全部采取同步的方式,那加载图片、生成dom、网络数据请求都会大大增加页面渲染时长。...2.JS 运行机制 JS 是单线程运行的,这意味着两段代码不能同时运行,而是必须逐步地运行,所以在同步代码执行过程中,异步代码是执行的。只有等同步代码执行结束后,异步代码才会被添加到事件队列中。...这里分析一下(大家不要纠结任务队列的叫法,本人说明的异步微任务、异步宏任务暂无根据,理解即可,请勿深究): 程序正式开始执行是从9行初始化promise对象开始,首先打印promise......然后往下执行发现是promise.then回调函数,此为异步微任务,放入任务队列中,等待同步任务执行完才能执行 再往下执行是timeout定时器,此为异步宏任务,放入任务队列中,等待同步任务执行完、异步微任务才能执行...可以看到异步依次读取两个文件,如果利用Generator的话需要手动执行next,async/await实现了自动化 写的不周到或者有错误的地方欢迎各位大神及时指出。 欢迎纠错~

85520

JS 异步

1.为什么要有Event Loop? 因为Javascript设计之初就是一门单线程语言,因此为了实现主线程的阻塞,Event Loop这样的方案应运而生。...2.请描述event loop(事件循环/事件轮询)的机制,可画图 因为js是单线程运行的,所以异步要基于回调来实现,而event loop就是异步回调的实现原理 JS先把同步代码执行完再去执行异步代码...) 显示的Web APIs只有宏任务,异步任务分为宏任务和微任务。...DOM渲染 JS是单线程的,而且和DOM渲染公用一个线程,JS执行的时候,得留一些时机供DOM渲染 9.为什么微任务执行时机比宏任务早?...为什么这里有返回undefined之后才会打印setTimeout,因为前面是同步代码和微任务执行完了,JS引擎工作结束,开始返回值。后面打印的setTimeout是浏览器处理的。

3.4K20

h5调用微信支付_h5打开小程序

wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印...config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。...}); 如果失败则为: wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看...,可以在返回的res参数中查看,对于SPA可以在这里更新签名。...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

96220

【实战】从零开始使用JavaScript制作自己的命令行(CLI工具)

首先,让我们制作一个简单的CLI工具,该工具会打印“ HelloWord” 要制作CLI,您需要制作两个文件 package.json:将设置和配置指定入口 index.js:根据CLI命令的可执行文件.../index.js" } } bin 属性具有可执行文件,cli 命令要求运行 index.js 文件。 运行CLI 最后,让我们运行CLI在控制台上打印Hello CLI。.../usr/bin/env node console.log('Hello CLI', process.argv); 你可以使用 process.argv 在命令中找到选项,选项以数组形式显示。...我们是否可以通过再次询问用户在这种情况下是否既不回答“高兴”不回答“悲伤”来进一步提高CLI ? 再次询问用户时,是否回答错误 #!...如果答案既不是悲伤不是快乐,请清除控制台,然后递归再次提问,如果答案是悲伤或快乐,关闭输入控制台。 ? 总结 在本文中,我们练习了一种制作简单的CLI工具(要求用户输入)的方法。。 ?

1.3K20
领券