可以使用递归函数和 promise 链来实现这个需求。我们可以定义一个函数,该函数接收包含所有请求参数的数组,并返回一个 Promise,只有在所有请求成功完成后,该 Promise 才会 resolve 并返回所有请求的结果数组。
function sendRequests(requests) {
if (!requests || requests.length === 0) {
return Promise.resolve([]);
}
const firstRequest = requests[0];
const restRequests = requests.slice(1);
return sendRequest(firstRequest)
.then(result => {
return sendRequests(restRequests).then(results => {
results.unshift(result);
return results;
})
});
}
在这个函数中,我们首先检查输入的数组是否为空。如果为空,则直接 resolve 一个空数组。否则,我们分离出第一个请求,并使用剩余的参数数组递归调用 sendRequests() 函数。每次请求完成后,我们都在后续请求的结果数组的开头插入该请求的结果。最终,整个函数将返回处理完成的所有请求的结果数组。
下面是 sendRequest() 函数的示例实现:
function sendRequest(param) {
return new Promise((resolve, reject) => {
fetch(`https://example.com/api/${param}`)
.then(response => response.json())
.then(data => resolve(data))
.catch(error => reject(error))
});
}
最后,我们可以使用 sendRequests() 函数来处理请求数组,并等待所有请求处理完成
sendRequests(["param1", "param2", "param3"])
.then(results => console.log(results))
.catch(error => console.error(error));
在以上示例中,我们将所有请求参数作为数组传递给 sendRequests() 函数,并在所有请求完成后输出结果数组。如果有任何一个请求失败,我们可以使用 catch() 函数来捕获错误并处理它们。