我需要读取一个网格并获取该数据并调用$ 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
}
});
}
我不知道如何确定该过程已完成。有时会很早就调用相关功能。
答案 0 :(得分:0)
好吧,如果我们跟踪完成了多少代码,那么我们可以在最后一个代码完成后触发代码。
Office.context.ui.closeContainer()
答案 1 :(得分:0)
我会使用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({
length: 3
}, () => fetch(link + 'foo').then(e => e.json()))).then(e => {
//called when all requests are done
console.log(e);
})
答案 2 :(得分:0)
尝试一下
function getJson(url, i) {
return $.getJSON(url, function (data) {
//var pmids = data.esearchresult.idlist;
//var pmidlist = pmids.join();
//pmid_List.push(pmidlist);
console.log('completed', i)
return data;
});
}
function run() {
let promises = []
for (let i = 0; i < rowscount; i++) {
const terms = 'foot';
const url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&retmode=json&retmax=500&term=" + terms;
promises.push(getJson(url, i));
}
return promises;
}
Promise.all(run()).then(() => console.log('All are completed'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>