У меня есть этот сумасшедший большой блок кода, который функционирует, но который я надеюсь правильно реорганизовать. В соответствии с Callback Hell я попытался разбить его на не анонимные функции и отделить эти функции от центрального кода.Обратный вызов Phantom.js Исходные ошибки при рефакторинге Phantom.js на Node.js/Express.js, чтобы избежать «callback hell»
Однако я столкнулся с проблемой, что многие разные части кода зависят от использования других в качестве параметров. Первое сообщение об ошибке я получил в последовательности 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 –
@GeorgeJempty: Нет, это не так. Код не работает. – Bergi
Я пошел «перефакторингом» в названии. Рефакторинг - это процесс улучшения * рабочего * кода. Мое голосование за закрытие может быть неправильным, но вы тоже можете подумать об улучшении заголовка вопроса. –