请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

错误捕获这个。。

老师说这个nextTick

push的时候 包了一层函数,是为了捕获错误。。。
我没理解的是:

如果不包依然可以在别的地方捕获,比如放到这里来:
function flushCallbacks () {
pending = false
const copies = callbacks.slice(0)
callbacks.length = 0
for (let i = 0; i < copies.length; i++) {
copiesi
}
}

export function nextTick (cb?: Function, ctx?: Object) {
let _resolve
callbacks.push(() => {
if (cb) {
try {
cb.call(ctx)
} catch (e) {
handleError(e, ctx, ‘nextTick’)
}
} else if (_resolve) {
_resolve(ctx)
}
})
if (!pending) {
pending = true
if (useMacroTask) {
macroTimerFunc()
} else {
microTimerFunc()
}
}
// $flow-disable-line
if (!cb && typeof Promise !== ‘undefined’) {
return new Promise(resolve => {
_resolve = resolve
})
}
}

正在回答

1回答

ustbhuangyi 2019-01-28 09:26:00

没看懂你的问题,你贴的代码不是和源码一样么

0 回复 有任何疑惑可以回复我~
  • 提问者 旋涡鸣人_ #1
    嗯 源码是这样的 push进去的是个箭头函数 如果直接是那个 cb 不是更直接,但是好像说 错误捕获有问题,那么放在这里flushCallbacks 捕获 是不是也行啊。。
    回复 有任何疑惑可以回复我~ 2019-01-28 20:30:51
  • ustbhuangyi 回复 提问者 旋涡鸣人_ #2
    用一层函数包一下主要是为了 try catch,保证一个 cb 执行出错不影响后面的执行。直接 push cb,放在 flushCallbacks 执行 try catch 也可以,不过你不仅仅要 push cb,还要 push cb 执行的上下文 ctx。
    回复 有任何疑惑可以回复我~ 2019-01-29 09:12:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信