2012-12-20 28 views
1

到IndexedDB的方法同步调用有一个方法说方法1在是有另一种方法的Java脚本说方法2电话。 method2在method2()调用后返回method1中需要的一个值。我如何从JavaScript的

var userObj={"first": [{'Key':'1', 
       'value':'student',}, 
          {'Key':'2', 
       'value':'Teacher',} 
       ], 
     "second":[{'Key':'1', 
       'class':'theory',}, 
          {'Key':'2', 
       'value':'lab',} 
       ] 

      }; 

function method1(){ 
    var dataArray =method2(userObj.first); 
    alert("dataArray size -"+dataArray.length); 
} 

function method2(firstData) { 

     var dataArray = new Array(); 
     $.indexedDB("SelfAssessment").objectStore("First_Sheet", "readonly").each(function(elem) { 
      dataArray .push(elem.value); 
     }).done(function() { 
      alert("inside first Data"); 
      return dataArray ; 
     }); 
     return dataArray ; 

    } 

在上面的代码中method2返回我必须在method1中使用的dataArray。那么如何做到这一点?

因为,method2是异步调用,所以我在“alert inside method2”之前得到“first alert”。如何以顺序的方式获得这个?

plz帮助

回答

3

不要有method2返回值。相反,通过一个回调函数来method2一旦值已被提取,这将执行:

function method2(firstData, completionCallback) { 

    var dataArray = new Array(); 
    $.indexedDB("SelfAssessment").objectStore("First_Sheet", "readonly").each(function(elem) { 
     dataArray.push(elem.value); 
    }).done(function() { completionCallback(dataArray) }); 
} 

并调用它像这样:

function method1(){ 
    method2(userObj.first, function(dataArray) { 
     // inside a function that is called by method2 when the value is fetched 
     alert("dataArray size -"+dataArray.length); 

     // do everything with dataArray inside this function 
    }); 
}