文章 评论 浏览 814
前来学习,大家没有疑问吗?下面代码既然外面返回一个 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嵌套,你这样就不行了
前来学习,大家没有疑问吗?下面代码既然外面返回一个 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) } }) }
前来学习,大家没有疑问吗?下面代码既然外面返回一个 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的时候同步调用,但回调必须异步调用。这么久了我也不确定细节,你改了可以跑一下测试,能通过就可以,不能通过就拿用例跑一下就明白了。
文章 0 评论 0
接受
不能这样写,按你的写法,onResolved会在调用then的时候同步调用,但回调必须异步调用。
这么久了我也不确定细节,你改了可以跑一下测试,能通过就可以,不能通过就拿用例跑一下就明白了。
剖析 Promise 内部结构,一步一步实现一个完整的、能通过所有 Test case 的 Promise 类