1
//function to download pps_compress.txt from cloud server for global parameter set PPs 
function get_pps_params() 
{ 

    chrome.storage.local.get(['ppsParams'], function(result) { 
     if (typeof(result) !== "undefined" && result != null){ 
      ppsParams = _base64ToArrayBuffer(result.ppsParams); 
      console.log(ppsParams); 
      dfd_pps.resolve(); 
      return; 
     } 
    }); 

    if(ppsParams == null) 
    { 
     var oReq = new XMLHttpRequest(); 
     oReq.open("GET", CLOUD_SERVER + 'get_pps_params', true); 
     oReq.responseType = "arraybuffer"; 

     oReq.onload = function (oEvent) { 
      console.log("Got pps params compressed!"); 
      ppsParams = oReq.response; // Note: not oReq.responseText 
      chrome.storage.local.set({ppsParams: _arrayBufferToBase64(ppsParams)}); 
      dfd_pps.resolve(); 
     }; 

     oReq.send(); 
    } 
} 

另一个数据反应在上面的代码,我试图让一些参数为从本地存储varaible ppsParams推迟一个XMLHttpRequest,但我想发送请求到CLOUD_SERVER只如果本地存储请求失败,现在两者都正在执行,那么如何推迟XMLHttpRequest。如何基于从本地存储

回答

1

貌似chrome.storage.local.get是异步的,所以如下图所示

function get_pps_params() 
{ 

    chrome.storage.local.get(['ppsParams'], function(result) { 
     if (typeof(result) !== "undefined" && result != null){ 
      ppsParams = _base64ToArrayBuffer(result.ppsParams); 
      console.log(ppsParams); 
      dfd_pps.resolve(); 
     } 
     if(ppsParams == null) 
     { 
      var oReq = new XMLHttpRequest(); 
      oReq.open("GET", CLOUD_SERVER + 'get_pps_params', true); 
      oReq.responseType = "arraybuffer"; 

      oReq.onload = function (oEvent) { 
       console.log("Got pps params compressed!"); 
       ppsParams = oReq.response; // Note: not oReq.responseText 
       chrome.storage.local.set({ppsParams: _arrayBufferToBase64(ppsParams)}); 
       dfd_pps.resolve(); 
      }; 

      oReq.send(); 
     } 
     return; 
    }); 
} 
+0

由于这个工作正常移动的XMLHttpRequest代码,这是回调方法不存在任何其他方法来等待功能之前完成执行另一段代码? – bawejakunal

+0

你可以使用promise - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise,但这对于这个简单的例子来说可能是过分的 –