使用await和setTimerout减慢for循环

时间:2019-02-18 16:12:20

标签: javascript jquery promise async-await

我一直在寻找答案,但是我需要一些帮助。我正在尝试模拟Combination of async function + await + setTimeout

while (goOn) {
  // other code
  var [parents] = await Promise.all([
                    listFiles(nextPageToken).then(requestParents),
                    timeout(5000)
                  ]);
   // other code
}

原因是我正在循环网格中的值并将其发送到NIH url。我只能在一秒钟内发送10个请求。所以我第一次尝试使用await和async直到完成才发送请求。好吧,那也太快了。因此,我想在每个请求之间放置1/10秒的睡眠时间。而且我什么也无法工作。

我的代码是

async function myFunction5() {
  var datainformation = $('#grid').jqxGrid('getdatainformation');
  var rowscount = datainformation.rowscount;
  try {
    for (let i = 0; i < rowscount; i++) {
      var data = $('#grid').jqxGrid('getrowdata', i); //
      let currentTerm = "(" + Strings.orEmpty(data['First Name']) + " " +
        Strings.orEmpty(data['Middle Initial']) + " " + Strings.orEmpty(data['Last Name']) + " " +
        Strings.orEmpty(data['Suffix']) + "[Author - Full]) AND " + Strings.orEmpty(data['Affiliations']) +
        "[Affiliation]";

      let terms = encodeURI(currentTerm);          
      const url =
        "/path/to/resource/" +
        terms;         

      var [pmids_List] = await Promise.all([
        getJson(url, i),
        timeout(100)
      ]);
    }
    //alert('all done');
  } catch (err) {
    alert(i + " " + data['Last Name']);
    console.log('done with some errors');
  }
}

它调用

function getJson(url, i) {
  var timestamp = new Date().toJSON();
  console.log(timestamp + ' getJSON')
  return new Promise(function (resolve, reject) {
    $.ajax({
      url: url,
      dataType: 'json',
      crossDomain: true,
      success: function (data) {
        var pmids = data.esearchresult.idlist;
        var pmidlist = pmids.join();
        pmid_List.push(pmidlist);
        console.log('success', i)
      },
      error: function (xhr, ajaxOptions, thrownError) {
        console.log(xhr.status);
        console.log(thrownError);
      },
      complete: function (a, b) {
        resolve(a);
        console.log('complete', i);
      }
    });
  });  
}

我知道我的Promise.all是错误的,但是我不知道是正确的。感谢您的帮助。而且,如果您有更好的主意-我很高兴。另外我还需要知道如何确定循环何时完全完成,以便继续下一步

0 个答案:

没有答案