我能找到的最接近的答案是https://stackoverflow.com/a/17216555/2834734
最常见的用法是链接ajax请求:
$.ajax({…})。然后(function(){return$.ajax({…});})。然后(function(){return$.ajax({…});})。然后(function(){return$.ajax({…});})
这可以很容易地在循环中完成
然而,这是循环程序,我有困难,加上我有一些不寻常的情况。
一个简单的解释是,我有一个需要循环的请求数组,有些将调用ajax负载,有些则不会。我需要他们连续运行,但也运行一个特定的函数调用,然后结束。
以下是我的情况的一个简单(我希望如此)示例:
// Here is my flow of logic
var thingsToDo = new tasks(); // Initiate the constructor, explained below
// Loop through the requests array and process them consecutively
for (var i in thingsToDo.requests) {
$.when(thingsToDo.jqxhr).then(function() {
thingsToDo.requests[i].fn();
})
}
// Run my final function at the end of the chain.
$.when(thingsToDo.jqxhr).then(function() {
runOnceAllComplete();
});
这是上面所基于的构造函数类。
// Constructor
function tasks() {
_tasks_ = this; // automatic global var
this.jqxhr = undefined; // Var to monitor ajax calls
this.requests = [ // list of tasks to run.
{
url: 'file1.php',
fn: function() {
_tasks_.load(this.url);
console.log('file1 loaded');
}
}, {
url: 'file2.php',
fn: function() {
_tasks_.load(this.url);
console.log('file2 loaded');
}
}, {
noUrl: true, // Note there is no file to load here
fn: function() {
console.log('no file here to load, but process something else');
$('body').css("background-color", "blue");
}
}, {
url: 'file3.php',
fn: function() {
_tasks_.load(this.url);
console.log('file1 loaded');
}
},
];
this.load = function(file) { // This runs the ajax call and resets this.jqxhr
this.jqxhr = $.get(file);
}
}
function runOnceAllComplete() {
alert('hooray!, we finished');
}
我遇到的棘手问题是,请求是动态创建的,因此可以执行1-n个请求,这就是我选择循环的原因,它们必须按照该顺序执行。
如前所述,一些请求将调用ajax调用,而其他请求可能不会,这似乎不会中断
$.when().then()
,但问题是在promise得到解决之前循环仍在继续,我的最终函数在最终请求之前发生。在我第一次使用promise时,我仍在努力说服自己。
尝试在fn
中包含return
语句,this.load
;在fn
处添加链接到$(“body”)
的.promise()
以返回jQuery promise对象;使用函数.prototype.apply()
fn: function() {
// added `return`
return _tasks_.load(this.url);
}
this.load = function(file) {
this.jqxhr = $.get(file);
// added `return`
return this.jqxhr
}
fn: function() {
console.log('no file here to load, but process something else');
// added `return` , `.promise()`
return $('body').css("background-color", "blue").promise();
}
$.when.apply($, $.map(thingsToDo.requests, function(task) {
return task.fn()
})).then(runOnceAllComplete)
另请参见将延迟数组传递给$.when(),美元.when.apply($,someArray)的作用是什么?
但是我遇到了一个问题,使用.map()时,它不会等到每个请求完成后再处理下一个请求。我需要在进行下一步之前完成每一步。
尝试使用
.queue()
,它将按顺序调用队列中的函数,并且仅当当前函数调用了next
时
$(thingsToDo).queue("tasks", $.map(thingsToDo.requests, function(task) {
return function(next) {
// call next function in `"tasks"` queue
// when current function completes using `.then(next)`
return task.fn().then(next)
}
})).dequeue("tasks").promise("tasks").then(runOnceAllComplete)
请参见
.queue()
,.promise()
,在javascript中执行函数队列
在selenium中,在python中,我必须循环使用Jira1、jira2、jira3链接 对于范围(1,4)中的i: driver.find_element(By.XPATH,"//a[text()='Jira'] /str(i)")。 它给了我一个错误NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“//a[text()='
问题内容: 下午全部。当前尝试使用Selenium Webdriver循环浏览页面上的链接列表。具体来说,它是单击链接,从所述页面上抓取一行文本以写入文件,然后返回,然后单击列表中的下一个链接。以下是我所拥有的: 运行时,它会转到初始页面,然后返回主页面,而不是应有的子页面。打印x,我可以看到它递增了三倍而不是一倍。此后它也崩溃。我已经检查了所有的xpath等,并确认列表中的链接数得到了正确的计数
1.一般链表 图解链表: 链表 实现: <!doctype html> <html> <head> <meta charset="utf-8" > </head> <body> <script> function Node(ele) { this.ele=ele; this.next=null; } func
如果我像下面这样做一个异步调用,如何将它们与promise联系起来,这样我就可以按顺序做事了?在这个例子中,最终发生的是会将项按顺序推入。我更喜欢有promise的回答,但只要有效,什么都行
我使用以下代码滚动页面并跟踪quora上的用户(链接到页面:http://www.quora.com/Kevin-Rose/followers),向下滚动后会加载一定数量的用户,我使用的代码如下: 我得到以下错误: 消息:u'Element不再附加到DOM'; StackTrace: 编辑1:我尝试使用,但函数的输出对象显然不是可以迭代的链接列表。
我正在用我的java书复习数据结构,我需要重新创建一个循环链表。我对这个无限循环的链表有问题,弄不清楚为什么。我可以将值插入到列表中,但是打印和删除这些值似乎会无限循环最初插入的值。我如何更改我的List类以避免无限循环? CircularList.Class 链接类