如何将其他信息传递给node.js中第三方模块的回调

时间:2014-02-02 14:41:29

标签: javascript node.js

这是一个简单的node.js应用程序。我正在使用Zombie模块提供的Browser.visit(url, callback)http://zombie.labnotes.org),Browser.visit()将在不确定的未来使用不同的上下文将回调称为(error, browser, status)。我的回调需要一些额外的信息来完成它的工作。

到目前为止,我可以将其作为“工作”:

function test(title, url) {
    var browser = new Browser();
    browser.visit(url, function (e, browser, status, thetitle) 
    {
         // generate info using the title if browser visited url successfully
    }
    .bind(undefined, browser, undefined, title);
}

test("foo", fooUrl);
test("bar", barUrl);

但是有一个问题,bind()只是绕过了错误和状态参数。这似乎不是正确的方法。我怎么能将附加信息传递给这个回调?

仅供参考:刚刚得到确认,Zombie.js的API文档适用于1.4.x,2.0.0-Alpha API尚未最终确定。 https://groups.google.com/forum/?hl=en#!topic/zombie-js/qOS0W_cMCgQ

2 个答案:

答案 0 :(得分:0)

理解您的问题有点困难,我不确定您使用bind的原因,但也许这就是您要实现的目标?

的Javascript

function Browser(url) {
    this.url = url;
}

Browser.prototype.visit = function (url, fn) {
    var self = this,
        error = 'error',
        status = 'status';

    setTimeout(function () {
        fn(error, self, status);
    }, 1000);
};

function test(title, url) {
    var browser = new Browser(url);

    browser.visit(url, (function (theTitle) {
        return function (theError, theBrowser, theStatus) {
            // generate info using the title if browser visited url successfully
            console.log('theError: ', theError);
            console.log('theBrowser: ', theBrowser);
            console.log('theStatus: ', theStatus);
            console.log('theTitle: ', theTitle);
        };
    }(title)));
}

test('hello', 'world');
test('goodbye', 'mum');

输出

theError:  error
theBrowser:  Browser {url: "world", visit: function}
theStatus:  status
theTitle:  hello

theError:  error
theBrowser:  Browser {url: "mum", visit: function}
theStatus:  status
theTitle:  goodbye 

jsFiddle

答案 1 :(得分:0)

不需要仅使用bind将匿名函数传递给browser.visit访问title。这可行:

function test(title, url) {
    var browser = new Browser();
    browser.visit(url, function (e, browser, status) {
        console.log(title);
    });
}

titleconsole.log(title)的值与title函数的test参数值相同。

请注意,无论是同步还是异步调用传递给browser.visit的回调,这都有效。