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

JavaScript 异步编程指南 — Give me a Promise

Promise 状态流转 一个 Promise 在被创建出来时是一个等待态,最后要么成功、要么失败这个状态是不能够逆转的: 等待态(Pending) 执行态(Fulfilled) 拒绝态(Rejected...Promise 实例提供了两种错误捕获的方式:一是 Promise.then() 方法传入第二个参数,另一种是 Promise 实例的 catch() 方法。...err: There's a then mistake Promise 几个方法 Promise.all() 并行执行 Promise.all() 以数组的形式接收多个 Promise 实例,内部好比一个...for 循环执行传入的多个 Promise 实例,当所有结果都成功之后返回结果,执行过程中一旦其中某个 Promise 实例发生 reject 就会触发 Promise.all() 的 catch()...好比我们的程序,创建了一个 Promise 对象 promise,并为其注册了完成和拒绝的处理函数,因为一些原因,我们没有给予它 resolve/reject,这个时候 promise 对象将会一直处于

1.2K10

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

同时,async函数返回的promise会转换为“已拒绝”状态,在该状态下,我们应该在Promise#catch处理程序中处理错误-前提是该错误尚未被内部try/catch块捕获。...当 async 函数被拒绝的,并且被用来作为回调,而不是像当作一般promise 来看待(因为 promise 是异步的,不能被当作一般的回调函数,译者注),就会发生这种情况。...当异步事件处理程序被拒绝时, event emitter 将捕获未处理的拒绝并将其转发给错误事件。...当 promise 被拒绝时,Promise#catch处理程序将返回带有拒绝值的错误事件。...; }) .on('error', console.error) // This will be invoked. .emit('event'); 当与 async map 函数混合使用时,诸如

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

    记得有一次面试被虐的题,Promise 完整指南

    Resolve:是在异步操作完成时应调用的回调。 Reject:是发生错误时要调用的回调函数。 构造函数立即返回一个对象,即 Promise 实例。...还是输出: time is up ⏰ 是后者,因为当一个Promise resolved 后,它就不能再被rejected。...如果没有出错,则永远不会调用catch方法。 假设我们有以下承诺:1秒后解析或拒绝并打印出它们的字母。...当然,这种过早的捕获错误是不太好的,因为容易在调试过程中忽略一些潜在的问题。 Promise finally finally方法只在 Promise 状态是 settled 时才会调用。...我们可以使用Promise.all,它通常在启动多个异步任务并发运行并为其结果创建承诺之后使用,以便人们可以等待所有任务完成。

    2.3K20

    JavaScript基础——Promise使用指南

    在上篇文章里《JavaScript基础——回调(callback)是什么》我们一起学习了回调,明白了回调就是一个在另外一个函数执行完后要执行的函数,如果我们希望异步函数能够像同步函数那样顺序执行,只能嵌套使用回调函数...Rejected(已拒绝):如果Promise调用过程中遭到拒绝或者发生异常,那么我们的promise被拒绝,处于Rejected(状态)。...catch()方法只接收一个回调函数。catch()方法的onRejected回调的调用方式与then()方法的onRejected回调相同。...was successful') }, failData => { console.log('Request failed' + failData) } ) 我们还可以使用catch()方法进行捕获异常或拒绝...(iterable) 方法 该方法传入迭代的Promise数组对象,并一起返回一个Promise对象,当所有的Promise迭代对象成功返回后,整个Promise才能返回成功状态的值。

    98530

    JavaScript 编程精解 中文第三版 十一、异步编程

    在本章中,我们将为他们编写一些基本的网络函数。 回调 异步编程的一种方法是使执行慢动作的函数接受额外的参数,即回调函数。动作开始,当它结束时,使用结果调用回调函数。...这种回调函数必须始终检查它们是否收到异常,并确保它们引起的任何问题,包括它们调用的函数所抛出的异常,都会被捕获并提供给正确的函数。 Promise使这更容易。...当一个处理器抛出一个异常时,这会自动使then调用产生的Promise被拒绝。因此,如果异步操作链中的任何元素失败,则整个链的结果被标记为拒绝,并且不会调用失败位置之后的任何常规处理器。...就像环境处理未捕获的异常一样,JavaScript 环境可以检测未处理Promise拒绝的时候,并将其报告为错误。...它在调用时会产生一个Promise,当它返回(完成)时被解析,并在抛出异常时被拒绝。

    2.7K20

    JavaScript中的Promises

    它们是否和你以任何方式对另一个人做出的承诺有关呢? 此外,你为什么要使用promises呢?与传统的JavaScript操作回调(callbacks)相比,它们有什么好处呢?...打印jeffBuysCake表明承诺正在等待中。 当我们稍后一起构建jeffBuysCake时,你将能够自己证明此console.log语句。 在与Jeff交谈之后,你开始计划下一步。...当一个承诺得到实现时,你会在.then调用中做下一件事情: jeffBuysCake('black forest') .then(partyAsPlanned) // Woohoo!...如果发生这种情况,我们会说承诺被拒绝(rejected)了。 当承诺被拒绝了,你可以在.catch调用中执行应急计划。...当promise拒绝时,我们处理错误: getSomethingWithPromise() .then(data => {/* do something with data */}) .catch

    79620

    【译】JavaScript中的Promises

    它们是否和你以任何方式对另一个人做出的承诺有关呢? 此外,你为什么要使用promises呢?与传统的JavaScript操作回调(callbacks)相比,它们有什么好处呢?...image.png 打印jeffBuysCake表明承诺正在等待中。 当我们稍后一起构建jeffBuysCake时,你将能够自己证明此console.log语句。...当一个承诺得到实现时,你会在.then调用中做下一件事情: jeffBuysCake('black forest') .then(partyAsPlanned) // Woohoo! ???...如果发生这种情况,我们会说承诺被拒绝(rejected)了。 当承诺被拒绝了,你可以在.catch调用中执行应急计划。...当promise拒绝时,我们处理错误: getSomethingWithPromise() .then(data => {/* do something with data */}) .catch

    1.4K20

    「一次写过瘾」手写Promise全家桶+Generator+asyncawait

    3.x 是对象或函数 取出 x.then 并调用,调用时将 this 指向 x。将 then 回调函数中得到的结果 y 传入新的 Promise 解决过程中,递归调用。...同时需要注意,Promise 内部的异常不能直接抛出,需要进行异常捕获。...取出 x.then 并调用,调用时将 this 指向 x,将 then 回调函数中得到的结果 y 传入新的 Promise 解决过程中,递归调用。...(这个错误不能通过try/catch捕获,只能通过拒绝处理程序捕获) Promise.reject = function(reason) { return new Promise(function...手写 async/await Generator 缺陷: 1.函数外部无法捕获异常 2.多个 yield 会导致调试困难 async 函数对 Generator 函数改进如下: 1.内置执行器 2.更好的语义

    97020

    JavaScript Promise (期约)

    # 链式流 可以把多个 Promise 连接到一起以表示一系列异步步骤。...# 处理未捕获的情况 有些 Promise 库增加了一些方法,用于注册一个类似于“全局未处理拒绝”处理函数的东西,这样就不会抛出全局错误,而是调用这个函数。...如果 Promise 被拒绝,而在定时器触发之前都没有错误处理函数被注册,那它就会假定你不会注册处理函数,进而就是未被捕获错误。...它的处理方式类似于你可能对未捕获错误通常期望的处理方式:done() 拒绝处理函数内部的任何异常都会被作为一个全局未处理错误抛出(基本上是在开发者终端上)。...永远要记住为每个 promise 关联一个拒绝 / 错误处理函数,特别是从 Promise.all([]) 返回的那一个。

    46830

    【Web前端】Promise的使用

    }); 当Promise对象状态为已兑现时,​​then()​​方法会调用传入的回调函数并输出成功的信息;当Promise对象状态为已拒绝时,则会调用​​catch()​​​方法中的回调函数输出错误信息...这样就形成了一条链,依次处理多个异步操作。 四、错误捕获 在使用 Promise 进行异步操作时,错误处理是非常重要的一部分。...六、合并多个 Promise 处理多个异步操作时,可以使用 Promise.all() 和 Promise.race() 这两种方法来组合多个 Promise 对象。...([promise1, promise2]) .then(responses => { return Promise.all(responses.map(response =>...如果任何一个 Promise 解决失败,错误信息将被捕获并输出到控制台。 async 函数的返回值 async 函数总是返回一个 Promise,即使函数内没有显式返回值。

    6600

    JavaScript 权威指南第七版(GPT 重译)(五)

    同样,当迭代器与解构赋值一起使用时,next()方法只会被调用足够次数以获取每个指定变量的值。迭代器可能有更多值可以返回,但它们永远不会被请求。...调用者可以在这个承诺对象上注册一个或多个回调,当异步计算完成时,它们将被调用。 因此,在最简单的层面上,承诺只是一种与回调一起工作的不同方式。然而,使用它们有实际的好处。...但我们不能使用承诺来替代setInterval(),因为该函数会重复调用回调函数,而这是承诺设计上不支持的。...虽然理解 Promises 如何工作仍然很重要,但当与 async 和 await 一起使用时,它们的复杂性(有时甚至是它们的存在本身!)会消失。...TypeError: 我们不能再调用这个函数 注意,除了演示可撤销代理之外,上述代码还演示了代理可以与目标函数以及目标对象一起使用。

    24610

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

    AggregateError 可以把多个错误很方便地包装在一起,在后面将会看到。 除了这些内置错误外,在浏览器中还可以找到: DOMException DOMError 已弃用,目前不再使用。...如果异常是未捕获的,也就是说程序员没有采取任何措施来捕获它,则程序将会崩溃。 你在什么时候及在什么地方捕获代码中的异常取决于特定的用例。 例如,你可能想要在栈中传播异常,使程序完全崩溃。...] 如果这些 Promise 中的任何一个被拒绝,Promise.all 都会拒绝,并返回第一个被拒绝的 Promise 中的错误。...这个静态方法没有什么要处理的,因为**即使一个或多个输入 Promise 被拒绝,结果也始终是一个已解决的Promise **。...它们将生成器函数与 async 结合在一起。其结果是生成器函数将 Promise 暴露给使用者的迭代器对象。 我们用前缀为 async 和星号 * 声明一个异步生成器函数。

    6.3K50

    关于 JavaScript 中的 Promise

    一个待定的 Promise 最终状态可以是已兑现并返回一个值,或者是已拒绝并返回一个原因(错误)。当其中任意一种情况发生时,通过 Promise 的 then 方法串联的处理程序将被调用。...,使得调用 fetchData 的代码可以捕获并处理错误 });}// 使用fetchData函数获取数据fetchData() .then(data => { //...在调用 fetchData() 函数的代码中,可以使用 .then() 方法来处理成功获取数据后的进一步操作,并使用 .catch() 方法来捕获可能的错误。...通过链式调用 .then() 方法,代码更加清晰、易读。更好的错误处理机制: Promise 具有 .catch() 方法,可以捕获 Promise 链中任何地方发生的错误。...这使得错误处理更加集中和可控,而不必在每个异步操作中都编写独立的错误处理逻辑。避免回调嵌套: 使用 Promise 可以避免回调函数的嵌套问题,使代码更具可维护性。

    73262

    通俗的解释什么是Promise

    ): 就说这个事情交给我吧,我承诺我去买菜,买完回来马上给你做红烧排骨,做完马上就叫你吃(这个地方相当于promise链式调用),你现在该干嘛干嘛去,去刷抖音,打游戏都可以(不影响其他代码的调用)。...当Promise状态为fulfilled时,调用 then 的 onfulfilled 方法,当Promise状态为rejected时,调用 then 的 onrejected 方法, 所以在异步操作的完成和绑定处理方法之间不存在竞争...catch 方法当执行过程出现异常时执行,或Promise的状态被设为失败(rejected),并且没有设置rejected执行函数时也会执行。...另外catch无法捕获在异步方法里抛出的异常 finally 方法由于无法知道promise的最终状态,所以finally的回调函数中不接收任何参数,它仅用于无论最终结果如何都要执行的情况。...但是这里有一点要注意下:如果调用链中有一个出现异常或者状态被改为拒绝,那么调用链中剩下的就不会被执行。所以在使用链式调用时要慎重!

    89320
    领券