国粹 2022-05-04 13:57:35
为什么setTimeout里面的setState就不能进行批处理?如果批处理会有什么异常,望解答。
国粹 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) } }) }
我也有这个疑问,我猜测是,then 里返回的是一个 新 promise 对象 p2, 那么肯定需要 p2 调用了 resovle 函数,后面链式的 then 里的函数才能执行。 如果直接 resolve(x), 那么相当于把 x 这个promsie 对象传递给了 then 参数,这肯定不符合预期。 个人理解写成var x = onResolved(self.data); if ( x instanceof Promise) { x.then(data => resolve(data)); } else { resolve(x); }
可能更好理解一些。
- 共 1 页
- 1
new 关键点
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。new 关键字会进行如下的操作:
创建一个空的简单JavaScript对象(即{});
链接该对象(即设置该对象的构造函数)到另一个对象 ;
将步骤1新创建的对象作为this的上下文 ;
如果该函数没有返回对象,则返回this。 【很关键】
方法一
方法二
第 14 题:情人节福利题,如何实现一个 new