2014-02-26 83 views
0

我正在做一些使用indexdDB的原型應用程序,我無法弄清楚如何創建可重用函數。 例如,我想創建可重用函數來檢索LOV值。我知道它應該通過事件以某種方式創建,但我不知道如何。 任何人都可以請幫忙嗎?indexedDB可重用函數

下面是我想在生活帶來

function parent(){ 
    var lovValues = getLovValuesByType("STORE_TYPE"); 
    //lovType now is undefined 
}; 

function getLovValuesByType(lovType){ 
    var returnedLovValues = new Array(); 
    var t = db.transaction(["LST_OF_VAL"], "readonly"); 
    var objectStore = t.objectStore("LST_OF_VAL"); 
    var INDEX = objectStore.index("TYPE"); 
    var REQUEST = INDEX.openCursor(IDBKeyRange.only(lovType)); 
    REQUEST.onsuccess = function() { 
     var CURSOR = REQUEST.result; 
     if (CURSOR) { 
      var value = this.result.value.VAL; 
      returnedLovValues.push(value); 
      this.result.continue(); 
     } else { 
      return returnedLovValues; /// <------return data 
     }; 
    }; 
}; 

回答

1

return語句從回調函數返回REQUEST.onsuccess什麼的代碼。您不會從getLovValuesByType返回任何內容,這就是爲什麼lovValues未定義。

最直接的解決方案是使用一個回調函數:

getLovValuesByType("STORE_TYPE", function (lovValues) { 
    //lovType now is defined 
); 

function getLovValuesByType(lovTypem, cb){ 
    var returnedLovValues = new Array(); 
    var t = db.transaction(["LST_OF_VAL"], "readonly"); 
    var objectStore = t.objectStore("LST_OF_VAL"); 
    var INDEX = objectStore.index("TYPE"); 
    var REQUEST = INDEX.openCursor(IDBKeyRange.only(lovType)); 
    REQUEST.onsuccess = function() { 
     var CURSOR = REQUEST.result; 
     if (CURSOR) { 
      var value = this.result.value.VAL; 
      returnedLovValues.push(value); 
      this.result.continue(); 
     } else { 
      cb(returnedLovValues); 
     }; 
    }; 
}; 

更一般地,你可能想要做一些閱讀有關異步的JavaScript。

+0

是的,回調正是我要寫的答案。傳入一個被調用的函數,而不是返回。上面的關鍵行是cb(返回..)。 – Josh