0
我試圖用CasperJS運行一個自動作業,它帶來了一個JSON文件,並檢查在每個JSON對象中聲明的給定頁面上是否存在某些元素。我試圖遞歸地寫這個,但我遇到了一個問題,即異步遞歸流(即我唯一的同步函數)的開始是同步返回(如預期的)並導致腳本失敗。CasperJS中的異步遞歸處理和事件委託
根據this CasperJS github issue,PhantomJS當前不支持Promise。我也嘗試了.waitFor()
CasperJS method,但是如果我嘗試從最終的異步方法冒出一個返回值true
,則會導致無限循環(還存在waitFor由超時值控制而不等待響應的問題,但超時值可以更改)。這裏是一個代碼示例嘗試使用下面waitFor
,稍作簡化:
casper.start(urlStart, function() {
recursiveRun(jsonInput.length);
});
var recursiveRun = function(count) {
if (count) {
casper.waitFor(function check() {
return controller(); // Infinite loop here
}, function then() {
jsonInput.shift();
recursiveRun(count - 1);
}
}
}
var controller = function() {
casper.thenOpen(jsonInput[0].url, function() {
return renavigation();
}
}
var renavigation = function() {
casper.waitForSelector("#nav", function() {
this.thenOpen(inventoryUrl, function() {
return inventoryEvaluation();
}
}
}
var inventoryEvaluation = function() {
casper.waitForSelector("#status", function() {
this.evaluate(function() {
// Unimportant in-browser function
}
return true;
}
}
casper.run();
這是爲什麼不工作?如果有的話,遞歸和異步執行這些操作的正確方法是什麼?