簡體   English   中英

級聯調用函數jQuery

[英]cascaded calling function jQuery

我想調用如下所示的函數

getValueListDataWithScol1(1029).done(function (kvalue) {
  konto = kvalue;
  getValueListDataWithScol1(1033).done(function (mvalue) {
    mws = mvalue;
    getValueListDataWithScol1(1101).done(function (wvalue) {
      wirt = wvalue;
      LoadStaticData();
      LoadGridData();
    });
  });
});

但是它是硬編碼的,我想根據數組中的值動態地執行此操作。 例如,如果數組具有4個元素,則在此處添加其三個級別,應添加另一個級別,並在最終調用中調用兩個函數。 我不知道該怎么實現。 這背后的原因是我在加載函數和getValueListDataWithScol1中都需要被調用函數的值,基本上是回調函數

我試圖這樣做,但是函數不等待異步調用,我知道我不應該等待異步調用。 我無法將通話更改為同步。

function loaddata(ids) {
  var d = new $.Deferred();
  for (var key in ids) {
    getValueListDataWithScol1(ids[key]).done(function (value) {
      lists[ids[key]] = value;
    });  
    delete ids[key];
    loaddata(ids)
  }
  d.resolve(lists);
  return d.promise();
}

由於您的請求似乎並不相互依賴,因此您可以映射一個請求數組,並在所有請求都解決后使用$.when運行。

$.when.then的參數將與原始數組的順序相同

 var array = [5,2,6,4]; var promiseArrray= array.map(function(num, i){ console.log('Start request #' , i+1) return dummyRequest(num).then(function(res){ console.log('End request #' , i+1) return {num: num, res: res} }); }); $.when.apply(null, promiseArrray).then(function(){ var allResults = [].slice.call(arguments); processFinalResults(allResults); }); function processFinalResults(arr){ console.log('final results:'); console.log(JSON.stringify(arr)); } function dummyRequest(num){ var promise = $.Deferred(); setTimeout(function(){ promise.resolve(num * 100); }, num * 200);// alternate delay to shuffle completion order of fake requests return promise; } 
 .as-console-wrapper {max-height: 100%!important;} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM