gpt4 book ai didi

javascript - 运行 ajax 请求直到它返回结果

转载 作者:行者123 更新时间:2023-11-30 14:48:00 24 4
gpt4 key购买 nike

我目前依靠一个简单的 ajax 调用从我们的查询服务 api 中获取一些数据。不幸的是,它不是最健壮的 api,有时会返回空结果集。因此,我想重试 ajax 调用,直到 resultSet.length > 0

如果我找到结果,我可以使用 setTimeOut 并中断循环,但这似乎是一个不优雅的解决方案,尤其是当完成时间介于 1 秒到 6 秒之间时。我目前有以下内容,但它似乎并没有在需要时打破循环,并且仍然不优雅。任何帮助将不胜感激!

var resultSet = 0;

function fetchQueryData(query, time, iter) {
(function myLoop(i){
if (i == iter) {
fetchData(resultSet, dataset, query);
} else {
setTimeout(function(){
if (resultSet == 0) {
fetchData(resultSet, dataset, query);
}
if (--i) myLoop(i);
}, time)
}
})(iter);
}

fetchQueryData('select * from table', 6000, 5);

function fetchData(resultSet, dataset, query) {
var dataString = 'query=' + encodeURIComponent(query);

$.ajax({
type : "POST",
data: dataString,
url : "/queryapi",
success: function(json) {
var data = [];
var schema = json.data.schema;
var rows = json.data.rows;

if (typeof schema != 'undefined') {
resultSet = 1;
for (var i = 0; i < rows.length; i++) {
var obj = {};
for (var j = 0; j < schema.length; j++) {
obj[schema[j]['name']] = rows[i][j];
}
data.push(obj);
}
}
});
}

最佳答案

不使用 setTimeout,而是将请求包装在一个函数中,并在请求的 success 回调中调用该相同的函数,如果返回的集合是空的。

这将防止您一次向您的 API 发送多个请求,并且也会在您得到满意的响应后立即终止。

(简而言之,您使用的是递归,而不是显式循环。)

关于javascript - 运行 ajax 请求直到它返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48599419/

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