promise 相关问题

120 天前
 Man957

Promise.resolve().then(() => { throw new Error('abc') }); // Return new Promise(resolve => resolve(Promise.reject(new Error('abc')))) 为啥这两个结果等同?第二个 promise 是如何进行执行的?

323 次点击
所在节点    前端开发
4 条回复
Cat7373
114 天前
我帮你整理下格式:


Promise.resolve().then(() => {
   throw new Error('abc')
});


new Promise(resolve =>
   resolve(Promise.reject(new Error('abc')))
);
MinonHeart
107 天前
https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md

Fulfilled, if it has been resolved to a non-promise value, or resolved to a thenable which will call any passed fulfillment handler back as soon as possible, or resolved to another promise that is fulfilled.

Rejected 也是一样的逻辑。

执行 Promise.reject(new Error('abc'))
得到 Promise<Error>
执行 resolve ,跳到外层的 Promise
返回 Promise<Promise<Error>>
unwrapping (用户侧不可见)
得到 Promise<Error>
supuwoerc
101 天前
then 本身就会返回一个 promise ,不写 return 的话就相当于返回了 undefined ,发生错误或者 resolve/return 了 reject 都会使得 promise 进入 rejected 状态,有 catch 的话也会进去。
supuwoerc
101 天前
@supuwoerc 说的有点乱了,promise 的构造函数传入的函数,里面调用 resove 就相当于 then 里面调用 return ,大致这样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1007471

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX