Promise拒绝()导致“未捕获(承诺中)”警告

2023-12-13

曾经的承诺reject()回调被调用,警告消息“未被捕获(承诺)”显示在 Chrome 控制台中。然而我有一个catch处理程序就位。我无法理解其背后的原因,也不知道如何摆脱它。

var p = new Promise((resolve, reject) => {
  setTimeout(() => {
    var isItFulfilled = false
    isItFulfilled ? resolve('!Resolved') : reject('!Rejected')
  }, 1000)  
})

p.then(result => console.log(result))
p.catch(error => console.log(error))

Warning:

enter image description here

Edit:

我发现如果onRejected处理程序没有明确提供给.then(onResolved, onRejected)方法,JS会自动提供一个隐式的方法。它看起来像这样:(err) => throw err。自动生成的处理程序将依次抛出。

参考:

如果是可调用的(被拒绝时)` is false, then
被拒绝时 be "Thrower".

http://www.ecma-international.org/ecma-262/6.0/index.html#sec-performpromisethen


发生这种情况是因为您没有将 catch 处理程序附加到第一个返回的 Promisethen方法,因此当承诺拒绝时没有处理程序。你do有一个承诺p在最后一行,但不是chained承诺,由then方法,在它之前的行中。

正如您在下面的注释中正确添加的那样,当未提供 catch 处理程序(或者它不是函数)时,默认情况下会抛出错误。在承诺链中,可以使用以下命令捕获此错误catch方法回调,但如果不存在,JavaScript 引擎将像处理任何其他未捕获的错误一样处理该错误,并在这种情况下应用默认处理程序,这会导致您在控制台中看到的输出。

为了避免这种情况,请链接.catch第一个返回的承诺的方法then, 像这样:

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

Promise拒绝()导致“未捕获(承诺中)”警告 的相关文章

随机推荐

  • Linq 和不支持的数据类型(地理)

    所以 Linq 不支持Geography数据类型 这给可爱的 将表拖到 Linq 设计表面 开发模型的工作带来了麻烦 有什么方法可以扩展 Linq 以使用 Geography 数据类型吗 或者 每当我需要使用地理列时 我是否需要构建一个全新
  • 无法执行该操作,因为链接服务器“(null)”的 OLE DB 提供程序“SQLNCLI10”无法开始分布式事务

    我正在使用连接池连接 SQL Server 2008 通过 JNDI 名称 使用 XA 连接来跨数据库服务器进行访问 现在 除了使用 OPENROWSET 的查询之外 我的所有查询都可以正常执行 现在这个 OPENROWSET 在正常连接下
  • mysql:错误代码[1267];操作“=”的排序规则 (latin1_general_cs,IMPLICIT) 和 (latin1_swedish_ci,IMPLICIT) 的非法混合

    我想做password我的用户表的列是case sensitive在mysql中 以下是该表的说明 Table mst user FIELD TYPE COLLATION user id VARCHAR 100 latin1 swedish
  • 使用 PHP PDO 从数据库获取值并将输入更新为已检查

    我正经历着最困难的时期才能获得我想要的结果 我做了很多研究 但我就是不明白 我对此很陌生 但在发布这个问题之前做了我的研究 好的 我有一个包含这些列的表 user id my music my movies my weather my ma
  • 如何使用C#让线程按顺序通过门

    我有三个线程 代码的某些部分可以并行运行 某些部分被锁定 当时只有一个线程 然而一把锁只需让他们按顺序进入即可 由于这是一个循环 因此变得更加复杂 我该如何做出这种行为 如果我有一个打印语句 我希望收到以下输出 1 2 3 1 2 3 1
  • ListViewItem 不会拉伸到 ListView 的宽度

    我目前正在使用 XAML 设计一个 Windows 8 商店应用程序 但我遇到了一个小尺寸问题 我有一个带有 DataTemple 的 ListView 我的 ListView 和 DataTemplate 的代码如下
  • 如何在选定的原型javascript选择框中触发onchange事件?

    我正在使用选择框的选定原型 现在我想在该选择框上触发 onchange 事件 这是链接选定的原型 这个怎么做 请帮我 div class side by side clearfix style margin bottom 14px div
  • 如何在 scala 宏内部从带有类型参数的类型获取类型参数?

    我有一个类型 在本例中 代表方法的返回类型 其形式为List Int 例如 我知道该类型携带该信息 因为toString结果是正确的值 但如何提取该类型 我试过 typeSymbol 但这会完全丢失所有类型信息 您可以使用TypeRef提取
  • 嵌套for循环的时间复杂度

    我需要计算以下代码的时间复杂度 for i 1 i lt n i for j 1 j lt i j Some code Is it O n 2 是的 嵌套循环是快速获得大 O 表示法的一种方法 通常 但并非总是 一个循环嵌套在另一个循环中将
  • Rails3 种子数据嵌套属性

    我在这里做错了什么 表单可以工作 但在尝试播种数据时不断收到 street1 Symbol 的未定义方法 to i 编辑 如果我将所有事情都作为单个地址 has one 而不是 has many 种子进行 编辑 2 请参阅下面其他人的答案
  • 在 RDLC 报告中使用多个数据集时出错

    我正在使用两个数据集创建 RDLC 报告 早些时候 我使用一个数据集 它工作正常 但是当我添加第二个数据集时 它开始给我以下文本框错误 错误 1 文本框 Textbox10 的值表达式引用字段 HospitalAddress 报表项表达式只
  • Spring JDBC - 最后插入的 id

    我正在使用 Spring JDBC 是使用 Spring Framework 获取最后插入的 ID 的简单方法还是我需要使用一些 JDBC 技巧 jdbcTemplate update insert into test name value
  • 连续单击 JButton 两次

    我想知道 java 中是否有内置函数或检查 JButton 是否连续单击两次的方法 不要将其与跟踪 JButton 被单击或双击 JButton 的次数相混淆 我搜索了多个线程 它们似乎都在谈论后者 如果调用按钮 我有以下代码可以工作but
  • 矩阵3d变换以获得梯形?

    我尝试模拟向后翻转效果 即两扇门同时向后打开 我尝试了不同的矩阵生成器来获得所需的梯形 但我没有任何运气 我知道我必须将旋转 Y 从 0 度设置为 180 度并保持变换原点 但那个梯形让我丧命 怎么样使用perspective demo H
  • 隐藏移动版本网站内容的最有效方法是什么?

    我正在开发一个大型网站的移动版本 完整网站中有很多内容是移动设备不需要的 隐藏这个的最好方法是什么 即什么会导致浏览器的工作量最少 从而保持响应能力 CSS显示 无 jQuery 的 消除 方法例如 未测试 var elements to
  • 请求“静态初始化订单惨败”的详细描述

    我在 faq lite 中读到了有关 SIOF 的信息 但我仍然不明白为什么会出现这个问题 我有一个静态库 a 我使用该库来使用其静态常量数据成员对象类型 然后我使用静态常量数据成员对象类型并将其分配给全局变量 对象 但当我将全局变量用于我
  • Python multiprocessing.Process 不并行运行

    为什么下面代码的进程不能并行工作 当我运行代码时 我等待它并行运行 但它首先等待第一个进程完成 然后是第二个进程 依此类推 没有什么是并行运行的 可能我在并行执行Python代码时有一个盲点 import multiprocessing i
  • uinavigationcontroller 内的选项卡栏控制器

    我在导航控制器中有一个选项卡栏控制器 但我似乎无法设置导航栏标题或使用以下方法向导航栏添加按钮 self title My Name 上面的代码仅更改选项卡栏项目名称 而不更改导航控制器 第二 我想禁止返回登录屏幕 屏幕截图中带有 UIWe
  • 轴末端的轴刻度线与面板边框不对齐[重复]

    这个问题在这里已经有答案了 我知道 ggplot 默认情况下会在轴和数据之间放置 填充 我希望轴的原点是一个实际的数字 例如0 我知道这可以使用scale y continuous expand c 0 0 and scale x cont
  • Promise拒绝()导致“未捕获(承诺中)”警告

    曾经的承诺reject 回调被调用 警告消息 未被捕获 承诺 显示在 Chrome 控制台中 然而我有一个catch处理程序就位 我无法理解其背后的原因 也不知道如何摆脱它 var p new Promise resolve reject