我有这个疯狂的大块代码功能,但我希望能够正确地重构。根据{{3}},我试图将其分解为非匿名函数,并从中央代码中分离出这些函数。
但是,我遇到的问题是代码的很多不同部分都依赖于使用其他部分作为参数。我在序列中收到的第一条错误消息是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
答案 0 :(得分:0)
您需要传递函数,而不是调用它们:
page.open(main_file, openIndexPage);
/* instead of
page.open(main_file, openIndexPage(status));
*/
和
page.evaluate(evaluatePage, finished, linkArray);
/* instead of
page.evaluate(evaluatePage(linkArray), finished(result),linkArray);
*/
代码中没有status
,linkArray
或result
值 - 它们是函数定义的参数。