1

我有一段 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 函数,以便我可以为所有 onerror 重用该函数(而不是将其复制粘贴到所有地方)。问题是如何传递回调?

4

2 回答 2

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
于 2013-01-07T19:54:08.117 回答
-1

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

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

于 2013-01-08T05:50:36.080 回答