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 に答える