带上头具痛哭

文章 评论 浏览 814

带上头具痛哭 2022-05-04 13:46:48

前来学习,大家没有疑问吗?
下面代码既然外面返回一个 promise,为什么不直接返回 promise,还要再包一个?是因为规范吗?

  if (self.status === 'resolved') {
    return promise2 = new Promise_(function (resolve, reject) {
      try {
        var x = onResolved(self.data)
        if (x instanceof Promise_) { 
          x.then(resolve, reject)
        }
        resolve(x) 
      } catch (e) {
        reject(e) 
      }
    })
  }

改为

  if (self.status === 'resolved') {
    var x
    try {
      var x = onResolved(self.data)
    } catch (e) {
      reject(e)
    }
    
    if (x instanceof Promise_) {
      return x
    } else {
      return promise2 = new Promise_(function (resolve, reject) {
        try {
          resolve(x)
        } catch (e) {
          reject(e)
        }
      })
    }

若果x里面还有一层或几层promise嵌套,你这样就不行了

不能这样写,按你的写法,onResolved会在调用then的时候同步调用,但回调必须异步调用。
这么久了我也不确定细节,你改了可以跑一下测试,能通过就可以,不能通过就拿用例跑一下就明白了。

剖析 Promise 内部结构,一步一步实现一个完整的、能通过所有 Test case 的 Promise 类

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文