V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Man957
V2EX  ›  前端开发

promise 相关问题

  •  
  •   Man957 · 329 天前 · 450 次点击
    这是一个创建于 329 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    4 条回复    2024-01-29 17:35:15 +08:00
    Cat7373
        1
    Cat7373  
       323 天前
    我帮你整理下格式:


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


    new Promise(resolve =>
       resolve(Promise.reject(new Error('abc')))
    );
    MinonHeart
        2
    MinonHeart  
       316 天前
    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
        3
    supuwoerc  
       310 天前
    then 本身就会返回一个 promise ,不写 return 的话就相当于返回了 undefined ,发生错误或者 resolve/return 了 reject 都会使得 promise 进入 rejected 状态,有 catch 的话也会进去。
    supuwoerc
        4
    supuwoerc  
       310 天前
    @supuwoerc 说的有点乱了,promise 的构造函数传入的函数,里面调用 resove 就相当于 then 里面调用 return ,大致这样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6000 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:58 · PVG 09:58 · LAX 17:58 · JFK 20:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.