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

【译】《Understanding ECMAScript6》- 第七章-Promise

如果Promise没有rejection监听,那么所有的失败信息会被静默处理。所以,rejection监听是非常必要的,即便只是输入失败信息,以便调试。...下面我们将讨论如何使用链式promise来实现复杂的异步操作。 每次执行then()或者catch()都会创建并返回一个新的promise。...通过这种机制,promise的链式调用可以捕捉到链条前面的错误并作出相应处理。 笔者建议链式操作promise时,在链条末尾添加rejection响应函数,以确保链条产生的错误正确处理。...随后这个值传递给此promiserejection响应函数,并返回value+1。...使用生成器和promise可以更方便地调度异步任务。promise提供一个公用接口用来返回异步操作的结果。随后便可以使用生成器和yeild操作等待并处理异步响应。

2K60
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript中的Promise

它允许你为异步操作的成功和失败分别绑定相应的处理方法(handlers)。...2、可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。 3、可以在对象之间传递和操作promise,帮助我们处理队列。...new Promise( function (resolve, reject) { // 一段耗时的异步操作 resolve('成功') // 数据处理完成 // reject...如果Promise 对象状态变为resolved,则会调用then方法指定的回调函数;如果异步操作抛出错误,状态就会变为rejected,就会调用catch方法指定的回调函数,处理这个错误。...Promise 的值的填充过程都被日志记录(logged)下来,这些日志信息展示了方法中的同步代码和异步代码是如何通过Promise完成解耦的。

1.1K20

NodeJS中的异步编程经验

关于 Unhandled Rejection 一个 Promise 是一个异步操作的状态机,其可能处于这三种状态之一 pending:异步操作还在执行中 fulfilled:异步操作已经完成 rejected...在 Node.js 6.6.0 中增加了一个特性:对 Promise 中未处理rejection 默认会输出 UnhandledPromiseRejectionWarning 提示 例如:test.js...Promise API 中有 .catch() 这个方法,可以用来处理捕捉 rejection 进行处理 但是注意: 这个例子中虽然用 .catch() 捕捉处理Promise 中的...可以参考文章:ES7 中的 async await,在这篇文章中详细介绍了 Async/Await 并且和 Promise 进行了对比,Async/Await 在处理异步操作上的优势更明显。...async 异步函数返回的是 Promise,所以执行异步函数后,统一需要用 .catch() 对可能出现的 rejection 进行捕捉处理,否则统一也是会出现 UnhandledPromiseRejectionWarning

1.7K20

异步函数中的异常处理及测试方法

你将学到什么 通过后面的内容你将学到: 如何从 Javascript 的异步函数中抛出错误 如何使用 Jest 测试来自异步函数的异常 要求 要继续往下读你应该: 对 Javascript 和 ES6...果然不出所料,异步方法返回了一个Promise rejection,从严格意义上来讲,并没有抛出什么东西。错误包含在了Promise rejection中。...看把你能的,来抓我啊 从严格意义上讲异步函数和异步方法不会抛出错误。异步函数和异步方法总是返回一个Promise,无论它已完成还是拒绝,你必须附上 then() 和 catch(),无论如何。...记住:拒绝的Promise会在堆栈中传播,除非你抓住(catch)它。 要在 try/catch 中正确捕获错误,可以像这样重构: ? 这就是它的工作原理。...总结 最后总结一下: 从异步函数抛出的错误不会是“普通的异常”。 异步函数和异步方法总是返回一个Promise,无论是已解决还是拒绝。 要拦截异步函数中的异常,必须使用catch()。

2.9K30

你没有抓住 Promises 的要点

现在,如果中间出现失败的情况,那个函数的链会抛出异常,异常会向上传播,直到有人可以来处理它为止。 在异步编程的世界里,你没法“ 返回” 一个值了,它没法及时地读取到。...下面四火对 domain 做一个小的说明: 异步编程中,你没法简单地通过 try-catch 来处理异常: try {   process.nextTick(function () {     // do...rejection 部分的代码就像同步代码的副本一样,在整个调用链中,fulfillment 部分会执行,也会在某个时候 rejection 中断,但是只有预先声明了的 handler 才能处理它。...handler 抛出了异常:获取数据,然后再抛出异常 数据装填失败,rejection handler 返回了一个值:必须得用一个 catch 子句捕获异常并处理 数据装填失败,但是 rejection...那又如何 也许你现在被我这样一波一波的解释感到压力陡增,想不明白为什么我会对那些写出这些糟糕行为的类库那么恼火。

60210

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

异步处理在我们日常开发中是很常见的场景,在Promise出现之前,我们都是通过回调来处理异步代码的结果,但是出现了一些问题: 回调地狱,在有多个异步逻辑存在依赖关系时,我们只能在回调里嵌套,这些深度嵌套的代码让代码难以阅读和维护...我在这里没有去处理finally handler可能出现的错误,这样我代码的调用方既可以处理结果也可以处理错误,而我可以保证我打开的一些副作用正确销毁(比如这里的隐藏loading)。...上,而后者catch注册在then返回的Promnise上,这意味着如果前者里只有p1出错了才会被处理,而后者p1出错,以及then返回的Promise出错都能处理。...写在结尾 Promise的出现,让我们: Promise提供了标准的方式来处理结果 Promise的then返回新的Promise,可以多个串联,达到注册多个回调的效果 对于已经完成的异步操作,我们后来注册的...如果Promise已经变成fulfilled了,那fulfillment handler会被立即调度(不是立即执行),调度指的是加入微任务队列,确保这些handler异步调用大概是Promise唯一让同步代码异步调用的情形了

1.3K30

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

另外无论函数的执行结果如何,不管是成功还是失败,finally 中的所有代码都会被执行。 请记住:try/catch/finally 是一个同步结构:它可以捕获来自异步代码的异常。...] 如果这些 Promise 中的任何一个拒绝,Promise.all 都会拒绝,并返回第一个拒绝的 Promise 中的错误。...如果 rejection 出现在数组的第一个元素中,则 Promise.race 拒绝,我们必须捕获它: const promise1 = Promise.resolve("The first!")...这个静态方法没有什么要处理的,因为**即使一个或多个输入 Promise 拒绝,结果也始终是一个已解决的Promise **。...; 当我们从异步函数中抛出异常时,异常会成为导致底层 Promise 拒绝的原因。 任何错误都可以通过外部的 catch 来拦截。

6.2K50

了解关键区别:await vs return vs return await

异步编程是现代 JavaScript 开发中一个重要方面,它使我们能够处理耗时的操作,而不会阻塞其他任务的执行。...它允许我们以更加同步和可读的方式编写异步代码,从而更容易处理 Promise 和执行非阻塞操作。当调用异步函数时,它会返回一个 Promise,该 Promise 解析为函数的最终结果。...只是调用 让我们先来看一下,当我们简单地调用另一个异步函数而不正确处理返回的 Promise 时,异步函数的行为。...await 的本质: • 异步代码同步:await 通过阻塞执行,直到等待的 Promise 解析或拒绝,简化了异步代码的使用。...因为我们 await waitAndMaybeReject() 的结果,所以它 rejection 时,将变成错误抛出,我们的 catch 代码块也将执行。

25010

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

同样,无论Promise.all的结果如何运行函数,finally 都会被执行: Promise.all([promise1, promise2, promise3]) .then(results...const promise1 = Promise.resolve("The first!"); const rejection = Promise.reject(Error("Ouch!"))...; 我们传递给Promise.allSettled一个由两个Promise组成的数组:一个已解决,另一个拒绝。 这种情况 catch 不会被执行, finally 永远会执行。...Node.js 中的异步错误处理:回调模式 对于异步代码,Node.js 主要使用这两种方式: 回调模式 event emitters 在回调模式中,异步 Node.js API 接受一个函数,该函数通过事件循环处理...相反,异步中的异常需要一些技巧来处理。 浏览器中的新JavaScript API几乎都偏向 Promise

2.2K20
领券