2013-01-07 52 views
1

我有一段代碼爲IndexedDB的如何將回調傳遞給全局的onerror方法?

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(而不是複製粘貼所有的地方)。問題是如何傳遞迴調?

回答

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 
+0

是的,我已經試過這個,這給我錯誤回調是undefined – surya

+0

@spiderdevil你需要通過回調,看我的編輯。 – jbabey

+0

這會好嗎?因爲onerror期待函數(e) – surya

-1

我寧願避免全局錯誤處理程序。如你所見,代碼並不真正減少,而是花費在包含另一個包裝函數上。這樣做時,錯誤堆棧跟蹤不會告知哪個請求導致錯誤。

+0

那麼我應該如何處理這個,如果我不想在同一個地方粘貼相同的代碼? – surya

+0

這是最好的解決方案。複製粘貼對我來說不是一件麻煩事。 gzip會壓縮它們,所以不用擔心代碼大小。 –