Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环100+;getJSON调用并在完成后调用另一个函数_Javascript_Jquery - Fatal编程技术网

Javascript 循环100+;getJSON调用并在完成后调用另一个函数

Javascript 循环100+;getJSON调用并在完成后调用另一个函数,javascript,jquery,Javascript,Jquery,我需要读取一个网格,获取该数据并调用$getJSON url。网格可能有100多行数据。getJSON返回我添加到数组中的逗号分隔值列表。循环完成后,我将获取阵列并对其进行重复处理。我需要在另一个流程中使用副本。我知道我无法确定返回数据的顺序,但我需要知道所有调用都已发出 for (let i = 0; i < rowscount; i++){ $.getJSON( "https://eutils.ncbi.nlm.nih.g

我需要读取一个网格,获取该数据并调用$getJSON url。网格可能有100多行数据。getJSON返回我添加到数组中的逗号分隔值列表。循环完成后,我将获取阵列并对其进行重复处理。我需要在另一个流程中使用副本。我知道我无法确定返回数据的顺序,但我需要知道所有调用都已发出

            for (let i = 0; i < rowscount; i++){
              $.getJSON(
      "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&retmax=500&term=" +
      terms,
      function (data) {
        var pmids = data.esearchresult.idlist;
        var pmidlist = pmids.join();
        pmid_List.push(pmidlist);
        if (i == rowscount - 1) {
          // call the related function
        }            
      });
       }
for(设i=0;i

我不知道如何确定这个过程已经完成。对相关函数的调用有时很早就完成了。

如果我们跟踪有多少函数已经完成,我们可以在最后一个函数完成时触发代码

let complete = 0;
for (let i = 0; i < rowscount; i++){
              $.getJSON(
      "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&retmax=500&term=" +
      terms,
      function (data) {
        var pmids = data.esearchresult.idlist;
        var pmidlist = pmids.join();
        pmid_List.push(pmidlist);
        complete += 1;
        if (complete == rowscount) {
          // call the related function
        }            
      });
       }
let complete=0;
for(设i=0;i
好吧,如果我们记录有多少人已经完成,我们可以在最后一个代码完成时启动代码

let complete = 0;
for (let i = 0; i < rowscount; i++){
              $.getJSON(
      "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&retmax=500&term=" +
      terms,
      function (data) {
        var pmids = data.esearchresult.idlist;
        var pmidlist = pmids.join();
        pmid_List.push(pmidlist);
        complete += 1;
        if (complete == rowscount) {
          // call the related function
        }            
      });
       }
let complete=0;
for(设i=0;i
我会使用fetch和Promise.all

const-link=”https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&retmax=500&term=";
Promise.all(Array.from)({
长度:3
},()=>fetch(link+'foo')。然后(e=>e.json())。然后(e=>{
//完成所有请求时调用
控制台日志(e);

})
我会使用fetch和Promise.all

const-link=”https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&retmax=500&term=";
Promise.all(Array.from)({
长度:3
},()=>fetch(link+'foo')。然后(e=>e.json())。然后(e=>{
//完成所有请求时调用
控制台日志(e);
})
试试这个

函数getJson(url,i){ return$.getJSON(url、函数(数据){ //var pmids=data.esearchresult.idlist; //var pmidlist=pmids.join(); //pmid_List.push(pmidlist); console.log('completed',i) 返回数据; }); } 函数运行(){ 让承诺=[] for(设i=0;iconsole.log('all is completed')
试试这个

函数getJson(url,i){ return$.getJSON(url、函数(数据){ //var pmids=data.esearchresult.idlist; //var pmidlist=pmids.join(); //pmid_List.push(pmidlist); console.log('completed',i) 返回数据; }); } 函数运行(){ 让承诺=[] for(设i=0;iconsole.log('all is completed')
帮我理解你说的话。我可以看到,如果我叫它一次,这将工作,但我需要循环和调用的链接与不同的条款结束超过一百次。我怎么知道最后一个已经完成了?你的长度:3与什么有关?它只是做3个请求。Array.from()部分仅用于演示。。。我不知道如何获取要搜索的术语-但简而言之,只需使用.map()将它们循环到返回fetch()的数组中即可。。。并将生成的数组放入Promise.all@user1314159帮助我理解您的意思。我可以看到,如果我叫它一次,这将工作,但我需要循环和调用的链接与不同的条款结束超过一百次。我怎么知道最后一个已经完成了?你的长度:3与什么有关?它只是做3个请求。Array.from()部分仅用于演示。。。我不知道如何获取要搜索的术语-但简而言之,只需使用.map()将它们循环到返回fetch()的数组中即可。。。并将生成的数组放入Promise.all@user1314159中,我将Promise.all(run())放在何处。然后(()=>console.log('all is completed')?如果我把它全部放在自己的位置上,我的其他函数就会开始给出错误,比如未引用的项。我取出这行代码,我的代码运行得很好。我应该把Promise.all(run())放在哪里。然后(()=>console.log('all is completed')?如果我把它全部放在自己的位置上,我的其他函数就会开始给出错误,比如未引用的项。我把这行代码取出来,代码就可以正常运行了