簡體   English   中英

在Node.js / Express.js上重構Phantom.js以避免“回調地獄”時,Phantom.js回調參考錯誤

[英]Phantom.js callback Reference errors when refactoring Phantom.js on Node.js/Express.js to avoid “callback hell”

我有這個瘋狂的大功能代碼塊,但是我希望可以正確地重構它。 根據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();
}

如何傳遞各種依賴項,例如pagestatus ,因為我嘗試傳遞頁面,但是又遇到另一個錯誤ReferenceError: document is not defined

您需要傳遞函數,而不是調用它們:

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);
*/

您的代碼中沒有statuslinkArrayresult值-它們是函數定義的參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM