const apiList = [1,2,3,4,5]; 用promise实现接口的串行请求,不能用async/await,不能用递归 js
时间: 2024-09-24 14:24:10 浏览: 40
为了用Promise实现接口的串行请求(顺序执行),不使用async/await和递归,你可以创建一个简单的函数,每次接收一个API列表元素,发送请求并等待响应后再继续下一个请求。这里是一个示例:
```javascript
function sequentialRequest(apiList) {
let currentPromise = Promise.resolve();
function makeRequest(index) {
if (index < apiList.length) {
const url = apiList[index]; // 假设url是基于索引的API地址
currentPromise = currentPromise.then(() => {
return new Promise((resolve, reject) => {
// 使用axios或其他库发送请求
request(url).then(response => {
resolve(response);
// 保存下一个请求的Promise
makeRequest(index + 1);
}).catch(error => {
reject(error);
});
});
});
} else {
// 当遍历完所有API,返回最终结果
currentPromise.then(response => {
console.log('All requests completed:', response);
});
}
}
// 开始第一个请求
makeRequest(0);
}
// 调用函数,传入apiList
sequentialRequest([1, 2, 3, 4, 5]);
```
在这个例子中,`makeRequest`内部使用`.then()`来串联每个请求,只有当上一个请求完成才会执行下一个。当遍历完整个`apiList`,就会得到所有请求的结果。
阅读全文