我有這個瘋狂的大塊代碼,但我希望能夠正確地重構代碼。根據Callback Hell,我試圖將其分解爲非匿名函數,並將這些函數與中央代碼分離。Phantom.js回調參考錯誤重構Node.js/Express.js上的Phantom.js,以避免「回調地獄」
但是,我遇到了代碼的很多不同部分依賴於使用其他參數作爲參數的問題。我的序列中接收到的第一錯誤消息ReferenceError: page is not defined
將未重構的代碼是:
function startMyFunction(firstLayerUrl) {
phantom.create(function (ph) {
ph.createPage(function (page) {
var main_file=firstLayerUrl
page.open(main_file, function (status) {
var linkArray=[];
page.evaluate(function (linkArray) {
for (var i=0; i < document.getElementsByTagName('a').length; i++) {
linkArray.push(document.getElementsByTagName('a')[i].href)
}
return linkArray;
}
, function finished(result) {
linkArray = result;
runEmailLoop(linkArray);
page.close()
ph.exit();
},linkArray);
});
});
}, {
dnodeOpts: {
weak: false
}
});
}
嘗試的重構的代碼是:
function runFirstLayer(firstLayerUrl) {
phantom.create(function (ph) {
ph.createPage(function (page) {
var main_file=firstLayerUrl
page.open(main_file, openIndexPage(status));
});
}, {
dnodeOpts: {
weak: false
}
});
}
function openIndexPage (status) {
var linkArray=[];
page.evaluate(evaluatePage(linkArray), finished(result),linkArray);
}
function evaluatePage(linkArray) {
for (var i=0; i < document.getElementsByTagName('a').length; i++) {
linkArray.push(document.getElementsByTagName('a')[i].href)
}
return linkArray;
}
function finished(result) {
linkArray = result;
runEmailLoop(linkArray);
page.close()
ph.exit();
}
我怎樣才能上通過各種依賴,例如page
,status
,因爲我試過了頁面但是又得到另一個錯誤ReferenceError: document is not defined
這個問題似乎是脫離主題,因爲它屬於codereview.stackexchange – 2014-10-29 14:17:56
@GeorgeJempty:不,它沒有。代碼不起作用。 – Bergi 2014-10-29 14:19:25
我在標題中進行了「重新考慮」。重構是改進* working *代碼的過程。我的投票結果可能是錯誤的,但你也可能想考慮改進問題標題。 – 2014-10-29 15:32:01