Я много раз просматривал ответы, но мне нужна помощь.Я пытаюсь эмулировать Комбинацию асинхронной функции + await + setTimeout
while (goOn) {
// other code
var [parents] = await Promise.all([
listFiles(nextPageToken).then(requestParents),
timeout(5000)
]);
// other code
}
. Причина в том, что я зацикливаю значения в сетке и отправляю их в URL NIH.Я могу отправить только 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 неверен, ноЯ не могу понять, что правильно.Ваша помощь приветствуется.И если у вас есть идея получше, я весь в ушах.Также мне нужно знать, как определить, когда цикл полностью завершен, чтобы я мог перейти к следующему шагу