我有一系列ajax请求,在继续执行之前都等待解决
(通过$.when().then()
实现):
function myfunc(offset) {
// setTimeout(function(){
return $.ajax({
url:"https://www.URL.com",
crossDomain: true,
dataType: "jsonp",
success: function (response) {
// console.log(response);
data = data.concat(response);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
// handle errors
}
});
// },offset/10);-
}
$.when( // call all ajax requests
myfunc(0)
,myfunc(2500)
,myfunc(5000)
,myfunc(7500)
,myfunc(10000)
,myfunc(12500)
,myfunc(15000)
,myfunc(17500)
)
.then(function() { // when all the ajax requests are terminated
console.log(data);
});
我想稍微延迟一下,让它“更有可能”以某种顺序结束 (参见上面代码中的setTimeout)。
我不想执行第一个ajax请求,然后是第二个,然后是第三个。他们应该从约250毫秒的延迟开始。
但我的尝试只会导致承诺立即得到解决,而不会完成ajax请求,因而是空数据。
有没有办法设置超时并且没有放弃等待ajax解析?或者我应该以不同的方式构建我的代码?
答案 0 :(得分:2)
Like Rory我对这样做的用处持怀疑态度,但如果你想这样做,你就可以通过回复你在{{1回调:
ajax
答案 1 :(得分:0)
基于上面的代码以及你正在做的事情(按特定顺序加入一堆响应)......你可以尝试下面的代码:
urlArr = [
"http://jsonplaceholder.typicode.com/posts",
"http://jsonplaceholder.typicode.com/comments"
];
function joinResponses(arr) {
var promises = arr.map(function(url) {
return $.ajax(url).then(function(res) {
return JSON.stringify(res);
});
})
return $.when.apply($,promises).then(function() {
var joined = "";
for(var i = 0; i<arguments.length;i++) {
joined += arguments[i];
}
return joined;
});
}
joinResponses(urlArr).then(function(myJoinedResponses) {
document.write(myJoinedResponses);
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
根据你所要求的内容虽然听起来很奇怪,但你似乎可以做得更好。
答案 2 :(得分:-1)
Rory点非常好,但是如果你想要这样做的话......我会做那样的事情。
var arrayFunc = [func1, func2, func3]
for (var i = 0; i < arrayFunc.length; i++) {
(function() {
var j = i;
setTimeout(() => {
arrayFunc[j]();
}, i * 2500);
})();
}
编辑:setTimeout函数
edit2:修正了关闭错误