try catch的执行顺序
无意中看到一段大神的代码,大体结构如下
function handleThenable(promise, value) {var resolved;
try {
if (promise === value)
{ throw new TypeError('A promises callback cannot return that same promise.'); }
if (value && (typeof value === 'function' || typeof value === 'object'))
{
var then = value.then; // then should be retrived only once
if (typeof then === 'function')
{
then.call(value, function(val){
if (!resolved)
{
resolved = true;
if (value !== val)
{ resolve(promise, val); }
else
{ fulfill(promise, val); }
}
}, function(reason){
if (!resolved)
{
resolved = true;
reject(promise, reason);
}
});
return true;
}
}
} catch (e) {
if (!resolved)
{ reject(promise, e); }
return true;
}
return false;
}
我的问题 这个函数handleThenable什么时候会 return false;
回答
格式化下就清晰了,不满足圈中的2个if条件返回false
if (promise === value)
会丢异常,走cache分支,返回true
if (value && (typeof value === 'function' || typeof value === 'object')) { var then = value.then; // then should be retrived only once
if (typeof then === 'function')
...
虽然上面的 if 判断了 object 但后面并没有进一步处理,所以只有 value 是 function 才会走里面的分支,返回 true。
除了这两种情况都会返回false
以上是 try catch的执行顺序 的全部内容, 来源链接: utcz.com/a/27467.html