我正在编写一个使用缓存系统的nodejs / reactjs应用程序。
我遇到了一个错误,其中组件中从未显示缓存中的数据,我最终发现cache.isEmpty()
的行应该是cache.isempty()
。
在这种情况下Javascript没有抛出任何错误,只是停止执行。另一方面,如果我在其他地方进行调用,比如在if语句之前,它通常会抛出一个错误并告诉我函数没有定义。那是为什么?
read: function (apiCall, data, cacheKey, ttl, putQuery, retrieveQuery) {
if (cache.expired(cacheKey, ttl)) {
console.log('cache is expired');
api.call(apiCall,data, (response) => {
console.log(response);
db[putQuery](response);
db[retrieveQuery](data, (result) => {
cache.set(cacheKey, result);
cache.refresh(cacheKey);
render();
});
});
} else if (cache.isEmpty()) {
console.log('cache is empty');
db[retrieveQuery](data, (result) => {
cache.set(cacheKey, result);
render();
});
}
console.log('cache is ready');
},
如果您需要更多详细信息,请与我们联系。
编辑:为了说清楚,两种情况之间的唯一区别是,一次在else if语句中调用该函数,另一次是它不是。在这两种情况下,呼叫都以相同的方式发生答案 0 :(得分:1)
在这种情况下,Javascript没有抛出任何错误,只是停止执行。
是的,是的,它正在抛出TypeError
,因为你试图调用undefined
,这是不可调用的。但无论是什么函数调用该异常而不是让它可用(或者以你的代码没有检查的方式将它提供给你)。
因此,解决方案是检查调用代码的文档,以查看它是否以不同方式报告错误。这很常见,因为异常跟踪不会跨越异步边界传播。
这是一个吃/抑制异常的例子:
function foo(obj) {
obj.undefinedMethod();
}
try {
foo({});
} catch (e) {
console.log("Got an error");
}
// But if the caller suppresses it, converting it to
// something else... This example converts it to a return value
function bar() {
try {
foo({});
return true;
} catch (e) {
return false;
}
}
console.log("Before calling bar");
bar();
console.log("After calling bar");