【发布时间】:2019-11-16 12:11:10
【问题描述】:
在一个项目中发现以下代码,看不懂:
get(key, store = null) {
if (!key) {
return new Error('There is no key to get!');
}
let dbstore = this.localforage;
if (store !== null) {
dbstore = store;
}
return dbstore
.getItem(key)
.then(function(value) {
return value;
})
.catch(function(err) {
return new Error('The key (' + key + ") isn't accessible: " + err);
});
}
为什么是return new Error('There is no key to get!'); 而不是throw new Error('There is no key to get!');?
为什么不在catch 块中抛出错误?
【问题讨论】:
-
返回错误是一件非常不寻常的事情,这不是它们的用途。
-
这取决于您想要控制的位置。
throw立即将控制权交还给调用者:参见 MDN:“并且控制权将传递给调用堆栈中的第一个 catch 块。如果调用者函数之间不存在 catch 块,程序将终止。”,而如果你 @ 987654327@一个新的错误,你必须在另一个位置以不同的方式处理它 -
也许该代码的作者认为 try/catch 对代码的性能影响“太多” - 请参阅 stackoverflow.com/questions/19727905/…
-
由于作者还添加了一个不必要的
.then,所以他似乎没有那么熟练...
标签: javascript error-handling promise return