gpt4 book ai didi

javascript - 为什么这个 promise 被拒绝了?

转载 作者:行者123 更新时间:2023-11-30 08:19:06 29 4
gpt4 key购买 nike

我最近遇到了一个错误,导致我尝试使用 promises,并发现了一些我无法弄清楚的东西。

我已经在 Node v11.9 和 Google Chromes 控制台中对此进行了测试。

这个例子说明了我在说什么:

  Promise.reject("I dont throw").catch(console.log)

Promise.reject('I throw').catch().catch(e => console.log(e))

如您所见,第二个 catch 是记录错误的那个。

我必须包含第二个 catch() block 以便此代码段记录错误,但以下示例可以在产生拒绝 promise 的浏览器中运行:

    Promise.reject("I dont throw").catch(console.log) 
// -> Logs "I don't throw"


Promise.reject('I throw').catch()
// -> UnhandledPromiseRejectionWarning:

所以我的问题是:为什么错误仍然是用一个空的 catch block 抛出的?

我假设这是因为没有回调,并且在内部有一些检查会跳过未定义的 catch 回调并在链上继续到另一个 catch block ,或者在这种情况下,未处理的拒绝。

但如果是这种情况,为什么 VSCodes Typescript 类型的 .catch() 列为:

catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>;

这是否意味着输入不正确?

最佳答案

So my question is: Why is the error still thrown with an empty catch block?

将 undefined 传递给 .catch 实际上并没有处理拒绝。

第二个例子的日志 unhandledpromiserejection 只是让你觉得你没有正确处理拒绝。

TypeScript 中的定义很好。为什么?引用official ECMAScript spec :

When the catch method is called with argument onRejected, the following steps are taken:

  1. Let promise be the this value.
  2. Return ? Invoke(promise, "then", « undefined, onRejected »).

正弦 .then 可以这样调用:

p.then(onResoled); // just handle resolution, here onRejected is undefined

.catch(handler) 中使参数 handler 可选不违反任何内容。

关于javascript - 为什么这个 promise 被拒绝了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57015691/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com