Javascript 循环100+;getJSON调用并在完成后调用另一个函数
我需要读取一个网格,获取该数据并调用$getJSON url。网格可能有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
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;i
试试这个
函数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;i
帮我理解你说的话。我可以看到,如果我叫它一次,这将工作,但我需要循环和调用的链接与不同的条款结束超过一百次。我怎么知道最后一个已经完成了?你的长度: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')?如果我把它全部放在自己的位置上,我的其他函数就会开始给出错误,比如未引用的项。我把这行代码取出来,代码就可以正常运行了