对 Promise 中的错误和拒绝感到困惑

2024-04-20

All:

我对 JS Promise 还很陌生,当谈到 Promise 链接时,有一个令人困惑的地方,假设我有一个如下的 Promise 链接:

var p = new Promise(function(res, rej){
})
.then(
    function(data){
    }, 
    function(err){
    })
.then(
    function(data){
    }, 
    function(err){
    })
.catch(
    function(err){
    })

让我困惑的是:

  1. 什么时候调用函数(err)以及什么时候调用catch?
  2. 如何解决和拒绝then?

Thanks


使用 Promise 的公式是:

var p = new Promise(function(resolve, reject) {

  var condition = doSomething();

  if (condition) {
    resolve(data);
  } else {
    reject(err);
  }

});

没什么特别的.catch,这只是糖.then (undefined, func), but .catch更清楚地表明它纯粹是一个错误处理程序。

If a Promise没有解决并且没有提供拒绝回调,它跳到下一个.then在链中,其中有拒绝回调。拒绝回调是reject(err).

更详细的解释请参见:Javascript Promises - 来来回回 http://www.html5rocks.com/en/tutorials/es6/promises/.


那就是:在你的例子中。catch仅当前面的拒绝回调有错误时才会被调用。那就是有一个错误reject(err)函数本身 - 与前面的无关Promise没有解决。

您基本上可以将自己限制在拒绝回调中.catch在你的尽头.then链。任何Error in any .then然后将落入.catch。但有一个微妙之处:任何错误.catch没有被抓住。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 Promise 中的错误和拒绝感到困惑 的相关文章

随机推荐

  • 具有动态嵌套组件的角度循环依赖性

    我在互联网上寻找解决方案 但无济于事 不同情况等 所以请原谅下面的代码转储 我遇到的问题与循环依赖有关 代码转储是为了提供上下文 旁注 我对 Angular 和 Typescript 相当陌生 这个概念 当然 我正在尝试构建一组嵌套组件 它
  • 克隆/拉取 git 存储库时出现致命读取错误

    我在我的系统上使用 Git for Windows git 版本 1 7 4 msysgit 0 并且大多数时候它都工作得很好 但是今天在大学 每当我尝试使用 Git 时 我都会遇到问题git clone or git pull or ge
  • 在新日期上调用 getTime 时,未定义不是函数

    当尝试运行它时 我得到 未定义不是一个函数 我缺少什么 function bench func var start new Date getTime for var i 0 i lt 10000 i func console log fun
  • 当多个Spring Singleton实例同时访问时

    如果您在 Spring 配置中的单例范围内定义服务 那么如果多个用户尝试同时访问它 即作为依赖项注入到您的控制器中 会发生什么情况 它应该引起任何冲突吗 或者 IoC 容器将保留后面的调用直到第一个调用完成 如果是这样 它会降低大型应用程序
  • 绑定到枚举的关联值

    是否有一个标准的方法来绑定 比如说 TextField到枚举的关联值 所以 鉴于此 enum Choice case one String case two String 我可以以某种方式将它用作视图中的绑定吗 State var choi
  • 当方向设置为水平时,UIPageViewController 响应垂直平移

    我在这上面花了几个小时 我已经初始化了UIPageViewController with UIPageViewControllerNavigationOrientationHorizontal 但由于某种原因viewControllerBe
  • 我可以在共享库中声明全局变量吗?

    我可以在库中声明一个全局变量 然后将其编译为共享对象吗 通过将其声明为 extern 从其他库或主应用程序代码中引用它是否安全 理论上它是有效的 niko dev1 snippets cat libcode c int variable l
  • drools 中是否有任何 API 可以通过传递值来动态创建 drl 文件?

    我知道如何使用所有方法在 KIE 工作台中创建 DRL 文件 但我的问题是不使用 KIE 工作台 我们可以创建 drl使用我们所需的值进行文件 如果有任何可能性 请建议我 同样的方式建议我任何与此相关的 API 提前致谢 您可以使用Droo
  • 移动 safari 图片上传及其大小

    众所周知 Safari 移动版现在允许通过相机或图像库上传文件 问题 是 当从相机中拍摄照片时 它会按原样发送 这意味着它占用的内存非常大 我认为即使在 iPhone 4 上也大约有 2 或 3 mb 这使得上传速度非常慢并且消耗带宽 不适
  • 为什么 Visual Studio 有时无法到达我的断点?

    我一直在使用 Visual Studio 2005 和 2008 我注意到有时当我在代码中放置断点时 它不想转到断点 所以我重新启动我的电脑 然后它又可以工作了 好像有什么东西卡住了 这种事只发生在我身上吗 我怎样才能防止这种情况发生 这让
  • 使用 GORM 根据子表中的列进行排序?

    我有一个名为员工和子表地址的表 现在我想使用 GORM 获取地址表中按地址1排序的员工列表 Employee findAllByName name max maxRecords offset 100 sort Address address
  • 如何在JTree中的节点旁边显示特定的属性名称和值?

    我想在节点名称旁边显示属性的名称和值JTree 谁能告诉我该怎么做 这是我用来显示的代码JTree import javax swing import java awt import java awt event import java a
  • 如何获取 iPhone MPMoviePlayer 视频的总时间?

    我只想弄清楚如何获取视频的总时间 以秒为单位 是否有加载的视频元数据之类的 MP电影播放器 控制器有财产duration iOS 3 2 电影的时长 以秒为单位 只读 property 非原子 只读 NSTimeInterval持续时间 如
  • 就 RESTful 和无状态而言,拥有 /currentUser 等 REST 资源是否合法?

    就 RESTful 和无状态而言 拥有这样的资源是相当合法的 用户 123 但是 问题是 拥有省略用户 ID 并假设它是从用户会话在服务器上隐式解析的资源是否合法 例如 loggedUser 当标识符为 123 的用户被授权时 该资源将指向
  • 获取 Ruby 中第一个 = 符号之后的子字符串

    纯粹出于好奇 是否有一种更优雅的方法来简单地获取第一个之后的子字符串 字符串中的符号 以下作品回馈name bob string option name bob string string index 1 1 只是感觉不太像Ruby 这也有
  • 用于 Java 的 JWT(JSON Web Token)库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个使用 Java 和 AngularJS 开发的 Web 应用程序 并选择实现令牌身份验证
  • Fabric 上的事件中心已关闭 编写您的第一个应用程序

    我目前正在尝试在此处运行 Hyperledger Fabric 的第一个应用程序示例 gt http hyperledger fabric readthedocs io en release 1 1 write first app html
  • 您推荐哪种工作流引擎? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑在这个即将到来的项目中使用工作流引擎的想法 我们知道使用工作流引擎有很多注意事项 并且我们在许多平台上拥有丰富的开发经验 因此我
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include
  • 对 Promise 中的错误和拒绝感到困惑

    All 我对 JS Promise 还很陌生 当谈到 Promise 链接时 有一个令人困惑的地方 假设我有一个如下的 Promise 链接 var p new Promise function res rej then function