如何在全局范围内将回调传递给onerror方法?

时间:2013-01-07 19:45:53

标签: javascript indexeddb

我有一段IndexedDB代码

GetObj = function(storeName, key, callback){
    var db = indexedDB.db;
    if(db){
    var transaction = db.transaction([storeName], transactionType.READ_ONLY);  
    var obj = undefined;
    transaction.oncomplete = function(event) {              
        if(callback){
            callback(obj);
        }
    }; 
    var objectStore = transaction.objectStore(storeName);  
    var request = objectStore.get(key);  
    request.onerror = function (e){
        console.log("onError: in", e); 
        if (callback) {
            callback(-1);//error
        }       
    }
    request.onsuccess = function(event) {  
        obj = request.result;            
    };
   }    
}

我想全局定义request.onerror函数,以便我可以为所有错误重用该函数(而不是将其复制粘贴到所有地方)。问题是如何通过回调?

2 个答案:

答案 0 :(得分:1)

只需在更高的范围内定义它:

var onerrorHandler = function (e, callback){
    console.log("onError: in", e); 
    if (callback) {
        callback(-1);//error
    }       
};

然后将其用于回调:

... snip
var request = objectStore.get(key);  
request.onerror = function (e) {
    onerrorHandler(e, callback);
};
... snip

答案 1 :(得分:-1)

我宁愿避免使用全局错误处理程序。

如您所见,代码并没有真正减少,而是用于包含另一个包装函数。这样做时,错误堆栈跟踪不会告诉哪个请求导致错误。