gpt4 book ai didi

javascript - 执行处理每个请求的顺序请求

转载 作者:行者123 更新时间:2023-12-03 07:16:07 29 4
gpt4 key购买 nike

我需要按顺序发送请求,但在返回错误时停止顺序,我正在使用来自 angular 的 $http 提供程序。

我的代码是这样的:

const steps = [
{ url: '/api/test/1' },
{ url: '/api/test/2' },
{ url: '/api/test/3' },
{ url: '/api/test/4' },
]

const executeStep = index => {
// Validate step existence
if (typeof steps[index] == 'undefined') return
// Request
$http({method: 'get', url: steps[index].url})
.success(response => {
if (!response.success) throw response
executeStep(index+1)
}).error(err => {
console.error(err)
alert('Error')
})
}

executeStep(0)

我的问题是:有更好的方法来完成这项工作吗?

最佳答案

这是代码,和你的非常相似,但是没有处理或添加索引号,所以更清晰一些。

const queue = [
{ url: '/api/test/1' },
{ url: '/api/test/2' },
{ url: '/api/test/3' },
{ url: '/api/test/4' },
];

function runQueue() {
const req = queue[0];

$http({method: 'get', url: req.url})
.success(response => {
console.log(response);
queue.shift();
if (queue.length > 0) {
runQueue();
}
})
.error(err => {
console.error(err);
})
}

使用 Bluebird Promises 的解决方案。

另一个不错的选择是(特别是如果您的代码是服务器端 nodejs)使用 bluebird Promise图书馆。该库现在不是很流行,因为几乎所有地方都支持 Promises。但仍有一些方法非常有用。在你的情况下 Promise.each method将完美运行。

const Promise = require('bluebird'); // or import * as Promise from 'bluebird';
const queue = [
{ url: '/api/test/1' },
{ url: '/api/test/2' },
{ url: '/api/test/3' },
{ url: '/api/test/4' },
];

Promise.each(queue, (req) => {
return http$({method: 'get', url: req.url}).then((resp) => {
console.log(resp);
});
}).then(() => {
console.log("done");
}).catch(err => {
console.error(err);
})

关于javascript - 执行处理每个请求的顺序请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54461383/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com