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

NodeJS中的异步编程经验

问题引入:今天在 Gulp 构建任务中出现一个 html 解析错误,但是并没有报错,也没有中断 gulp 构建任务的执行,而是出现 UnhandledPromiseRejectionWarning 的警告...在 Node.js 6.6.0 中增加了一个特性:对 Promise 中未处理的 rejection 默认会输出 UnhandledPromiseRejectionWarning 提示 例如:test.js...rejection;但是注意在 err.message 中的 err 是未定义的,代码执行时会抛出错误,由于没有后续的处理,所以也会输出 UnhandledPromiseRejectionWarning...我们可以在 .catch() 中传入一个空函数,假装对 rejection 进行了处理,这样也没有触发 unhandledRejection 事件 Async/Await 关于 Async/Await,...async 异步函数返回的是 Promise,所以执行异步函数后,统一需要用 .catch() 对可能出现的 rejection 进行捕捉处理,否则统一也是会出现 UnhandledPromiseRejectionWarning

1.8K20

Node 脚本遭遇异常时如何安全退出

在一些重要流程中能够看到脚本的身影: CI,用以测试、质量保障及部署等 Docker,用以构建镜像 Cron,用以定时任务 如果在这些重要流程中脚本出错无法及时发现问题,将有可能引发更加隐蔽的问题。...异常码在操作系统中随处可见,以下是一个关于 cat 命令的异常以及它的 exit code,并使用 strace 追踪系统调用。...+++ exited with 1 +++ 从系统调用的最后一行可以看出,该进行的 exit code 是 1,并把错误信息输出到 stderr (标准错误的 fd 为 2) 中 如何查看 exit code...「而在 Node 中的错误处理中,我们倾向于所有的异常都交由 async/await 来处理,而当发生异常时,由于此时 exit code 为 0 并不会导致镜像构建失败。」...= 1 }) 在构建镜像时,也有关于异常解决方案的建议: ❝(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection

1.8K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript 错误处理大全【建议收藏】

    生成器函数的错误处理 JavaScript 中的生成器函数是一种特殊的函数。 除了在其内部作用域和使用者之间提供双向通信通道之外,它还可以随意暂停和恢复。...*/ 代码中迭代 try 块内的主处理流程。如果发生任何异常,就用 catch 停止。 异步错误处理 JavaScript 在本质上是同步的,是一种单线程语言。...但是这在大多数情况下并没有什么意义。Promises 的异步错误处理提供了更好的方式。...但这样做没有任何价值。与 setTimeout 一样,异步代码路径引发的异常从外部是无法捕获的,这将会使程序崩溃。 How about onerror? 怎么处理 onerror?...例如,将来的 Node.js 将使任何未处理 Promise rejection 的程序崩溃: DeprecationWarning: Unhandled promise rejections are

    6.3K50

    一个 Node 进程的死亡与善后

    在一些重要流程中能够看到脚本的身影: CI,用以测试、质量保障及部署等 Cron,用以定时任务 Docker,用以构建镜像 如果在这些重要流程中脚本出错无法及时发现问题,将有可能引发更加隐蔽的问题。...在 POSIX 中,0 代表正常的返回码,1-255 代表异常返回码,在业务实践中,一般主动抛出的错误码都是 1。...+++ exited with 1 +++ 从 strace 追踪进程显示的最后一行可以看出,该进程的 exit code 是 1,并把错误信息输出到 stderr (stderr 的 fd 为 2)...(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection....= 1 }) 在构建镜像时,Node 也有关于异常解决方案的建议: (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection

    1.1K20

    面试官:为什么Promise中的错误不能被trycatch?

    异步处理在我们日常开发中是很常见的场景,在Promise出现之前,我们都是通过回调来处理异步代码的结果,但是出现了一些问题: 回调地狱,在有多个异步逻辑存在依赖关系时,我们只能在回调里嵌套,这些深度嵌套的代码让代码难以阅读和维护...当Promise进入fulfilled状态时会调用此函数 catch 当Promise进入rejected状态时会调用此函数 finally当Promnise进入settled状态时会调用此函数(无论fulfilled...这将p1的rejection转换成了p2的fulfillment,这有点类似于try/catch机制里的catch,可以阻止错误继续向外传播。...Uncaught (in promise) TypeError: Cannot read property 'someProperty' of undefined 由于这时候的错误没有catch来处理,...解答开头的问题 现在我们知道要提供Promise给外部使用,Promise设计成在外面是没有办法获取resolve函数的,也就改变不了一个已有Promise的状态,我们只能基于已有Promise去生成新的

    1.6K30

    ES2017 异步函数的最佳实践(`async` `await`)

    两者的错误处理也有一些细微的差别。当普通函数引发异常时,通常希望使用try/catch块来处理异常。对于基于回调的API,错误将作为回调中的第一个参数传入。...同时,async函数返回的promise会转换为“已拒绝”状态,在该状态下,我们应该在Promise#catch处理程序中处理错误-前提是该错误尚未被内部try/catch块捕获。...当异步事件处理程序被拒绝时,缺少Promise#catch处理程序和try/catch块通常会导致应用程序状态异常。错误事件并未响应从而触发 未处理的promise,从而使调试更加困难。...(说明3) 说明3: API 将在内部将 Promise#catch处理程序添加到异步函数返回的Promise后。...免责声明:尽管此优化避免了前面提到的问题,但是由于返回的promise 一旦被拒绝,就不再出现在错误堆栈跟踪中,这也使调试更加困难。try/catch块也可能特别棘手。

    1.8K30

    关于 JavaScript 错误处理的最完整指南(下半部)

    如果我们失败了,或者决定不捕获它,异常可以在堆栈中自由冒泡。 使用 Promise 来处理定时器中的异常 使用定时器或事件无法捕获从回调引发的异常。...} ] 使用 async/await 来处理错误 为了简单起见,我们使用前面的同步函数toUppercase,并通过在function关键字前放置async来将其转换为异步函数 async function...; 当从 async 函数抛出异常时,我们就可以使用 catch 来捕获。 最重要的是,除了这种方式外,我们可以还使用try/catch/finally,就像我们使用同步函数所做的一样。...在异步生成器中 throw 将会触发 Promise 的reject,我们可以使用catch对其进行拦截。...Node.js 中的异步错误处理:回调模式 对于异步代码,Node.js 主要使用这两种方式: 回调模式 event emitters 在回调模式中,异步 Node.js API 接受一个函数,该函数通过事件循环处理

    2.3K20

    JavaScript错误处理完全指南

    另一方面,无论函数的结果如何,finally 语句都会运行:无论是失败还是成功,final 内部的任何代码都将运行。...生成器函数的错误处理 JavaScript 中的生成器(generator)函数是一种特殊的函数。 除了在其内部作用域和消费者之间提供 双向通信通道 外,它可以 随意暂停和恢复。...*/ 在这里,我们迭代 try 块中的 happy path。如果发生任何异常,我们将使用 catch 停止它。 7 异步错误处理 JavaScript 本质上是同步的,是一种单线程语言。...但是,这种方法在大多数情况下没有多大意义。稍后我们将看到,使用 Promises 进行异步错误处理可提供更好的开发体验。...; 在这里,我们使用 catch 处理错误。此代码的输出是: const promise1 = Promise.reject(Error("No good, sorry!"))

    5K20

    一文详聊前端异常原理

    因为在变量还没有声明的情况下,这两种查询的行为是不一样的。 如果 RHS 查询在所有嵌套的作用域中遍寻不到所需的变量,引擎就会抛出 ReferenceError。...当编译器检测到一个函数调用是尾递归的时候,它就覆盖当前的活动记录而不是在栈中去创建一个新的。 5. Error 与自定义异常 Error 是所有错误的基类,其他错误类型继承该类型。...它是 Error 类型中最常见的一种;由于没有具体异常堆栈和代码行列号,成为可最神秘的异常之一。...浏览器环境中的 console 对象有类似的 assert 方法。 4. 异步中的异常 非同步的代码,在事件循环中执行的,就无法通过 try catch 到。...主要注意的是,Promise 的 catch 方法用于处理 rejected 状态,而非处理异常。Rejected 状态未处理的话会触发 Uncaught Rejection.

    1.5K40

    ES6 Promise 的最佳实践

    处理 promise rejections 没有什么比 unhandled promise rejection(未处理的 promise 错误) 更让人头疼了。...当一个 promise 抛出一个错误,但你没有使用Promise#catch来捕获程序错误时,就出现这种情况。...在调试高并发的应用程序时,由于错误信息晦涩难懂(令人头疼),所以想要找到出错的 promise 是非常困难的。...此外,在未来的 Node.js 版本中,未处理的 promise reject 将使 Node 进程崩溃。良好的习惯能够有效降低出错的概率,现在就是养成良好习惯的时机。...当操作完成或引发错误时,将以 Error 对象(如果有)作为第一个参数传递来调用回调函数。如果未引发错误,则第一个参数将作为 null 传递。

    1.2K20
    领券