我有这个疯狂的大块代码,但我希望能够正确地重构代码。根据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