首页
学习
活动
专区
圈层
工具
发布

Promise的错误处理

题图 By Clm 在开发过程中我们经常使用Promise来处理异步,但是我们经常忽略Promise的错误处理。 今天带着大家来一起来梳理一下Promise处理错误的几种情况。...第一种情况是直接抛出error,在Promise中抛出错误只有throw和reject这两种方式,并且throw和reject抛出错误在Promise中没有区别,这两种方式都可以被catch所捕获,先看...: 再看通过reject来抛出错误,代码如下: new Promise((resolve, reject) => { reject("报错了哦") }).catch((e => {...第二种情况,处理Promise调用链中的错误,如果有一个较长的Promise调用链,其中某个环节抛出错误,错误会被后续链中最近的一个catch所捕获,代码如下: Promise.resolve(1)...这是Promise调用链的一个特性,调用链中一旦发生错误,这个错误调用链后面的then链会被跳过,直接进入catch函数。

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

    使用Promise.race后,如何区分超时和服务器返回错误?

    在使用 Promise.race 处理超时和服务器返回错误时,可以通过对错误对象的类型进行区分来判断是超时还是其他请求错误。下面是具体的实现方法。 1. 实现逻辑 上传成功:正常返回数据。...上传失败:请求失败,可能是服务器返回错误。 超时:当请求超过设定的时间限值时,触发超时错误。 2....解释 上传 Promise: 成功处理:检查 res.statusCode,如果是 200,表示成功,解析数据;如果不是,拒绝并返回服务器错误信息。...失败处理:直接拒绝并返回请求失败的错误信息。 超时 Promise:设定的超时时间后拒绝,并返回超时错误。...如果是超时或上传失败,根据 error.message 判断具体错误类型,分别处理。 4. 总结 通过这种方式,你可以清晰地区分超时和服务器返回的错误信息,从而在用户界面上提供相应的反馈。

    22900

    深入Promise错误处理

    但其过于基础,并未论述 Promise 使用者会在开发中遇到的一般问题。 所以,让我们稍微花点时间来深挖 Promise 中的错误处理问题,并找出答案。...第一种是开发者的失误: 对于程序中的 bug,就应该通过改变编码来避免;程序永远无法正确处置(因为根据定义,存疑的代码注定会崩坏)。...的 reject: 开发者在 promise 构造器函数中的错误(bug) 明确抛出错误 嵌套 promise 的 reject Q2: catch 监控什么区域呢?...asyncTask() .catch() // 只覆盖 asyncTask .then() .then() .catch() // 覆盖了2个 then 需要注意的就是,和 then 一样, catch 也会返回一个可链式操作的新...failed')}) .catch(err => console.log(err)) // operation failed promise 中的错误处理有可能会很难缠。

    54710

    Promise 自定义错误捕获

    return Promise.reject(e) } return Promise.reject(e) }) 为可能报错的处理段,配置对应的错误捕获。这里有利于拆分不同的错误处理逻辑。...但由于Promise不存在中断处理,当前错误捕获后依然会处罚后续逻辑, 所以我们依然需要在每个错误处理中添加错误类型判断。...Promise 反模式 其实大部分情况下,我需要的是一个只针对当前错误的处理模式。进一步的话,就是函数只捕获自身可处理的错误. 不能处理的错误跳过直接向下传递。...: IPromiseSig | IPromiseSig[]):Promise } 将具体的方法挂载在Promise原型上 // 默认错误标识 const PROMISE_CANCEL: Symbol...(加载状态重置等)需要通过finally() 处理 let loading = false async function API(e?

    1.1K10

    JavaScript异步编程4——Promise错误处理

    概述 在上一篇文章《JavaScript异步编程3——Promise的链式使用》中,通过Promise的链式使用,避免程序中多次嵌套回调(回调地狱)。...详论 Promise的then()方法有两个参数,一个是成功的回调函数,一个是失败的回调函数。可以将失败的回调函数这个参数省略掉,而使用Promise的catch()方法,捕获失败的异常。...resolve(req.response); } else { //完成未完成,返回错误...前者通过Promise的then()处理异常,只会运行功能的回调函数和失败的回调函数其中的一个;后者通过catch()处理异常,则更加像JavaScript的try/catch,在try{}中发生的错误会立即转到...resolve(req.response); } else { //完成未完成,返回错误

    82920

    如何设计API返回码(错误码)?

    一、前言 客户端请求API,通常需要通过返回码来判断API返回的结果是否符合预期,以及该如何处理返回的内容等 相信很多同学都吃过返回码定义混乱的亏,有的API用返回码是int类型,有的是string类型...或者代码执行出错 通过状态码即可初步判断问题原因,HTTP状态的设计思路值得借鉴。...,我们对错误码进行分段 返回码值 说明 0 成功 99999 系统发生未知异常 10000-19999 参数校验错误 20000-29999 A步骤执行失败 30000-39999 B步骤执行失败 通过这样的设计...四、个性化Message 通常我们的message都是写给工程师看的,但是在不同的场景下,同样的错误,可能需要给用户看到不一样的错误提示。...这样我们就可以让手机APP的用户、微信小程序的用户、网页下单的企业用户看到不同的消息 五、返回信息的统一处理 有了统一的code,我们就可以通过Nginx或者APM工具统计API请求Code数量及分布信息

    7.5K30
    领券