我需要写一些Javascript(ES6版本)来执行以下任务:
项目总数是可变的。因此,我计划使用以下结构使用do循环执行此任务:
//suppose str = 'item1,item2,item3,....itemN'
do {
fetch(url, {param1: str}).then(response => {
//check the response flag, if success, done and exit.
//if not success, drop one item and re-do fetch
})
}
问题在于,提取是异步调用,因此我无法强制按顺序执行每个提取。
我需要确保仅在先前的fetch()失败时才执行新的fetch()。有什么想法吗?
答案 0 :(得分:2)
您可以使用递归:
function fetchRecursive(param) {
return fetch(url, {param1: param})
.then(response => response.ok ? response : Promise.reject(new Error(response.status)))
.catch((err) => {
if (param.length > 1) {
return fetchRecursive(param.slice(0,-1));
} else {
return Promise.reject(err);
}
})
}
fetchRecursive([ 'item1', 'item2', 'item3', 'item4' ])
.then(response => { ... })
.catch(err => { ... });
答案 1 :(得分:0)
也许您可以使用递归,如下所示:
//str = 'item1,item2,item3,....itemN'
function fetchUrl(str){
fetch(url, {param1: str}).then(response => {
if(response.success){
//exit from the program
return response;
}
else
{
return fetchUrl(str.split(",").pop().join(","));
}
});
}
答案 2 :(得分:-2)
在for循环中使用await
代替then