Node.jscallback

我似乎无法理解callback的概念。 在我忍受之前,我没有和他们一起工作。 为了让我的手变湿,我试图用zombie.jslogin到twitter。

这里是一个例子:

var Browser = require("zombie"); var browser = new Browser({ debug: true}) browser.visit("https://mobile.twitter.com/session/new", function (callback) { browser.fill("username", "xxxxx"); browser.fill("password", "xxxxx"); browser.pressButton("Sign in", function (err, success) { if(err){ console.log(browser.text('.message')); console.log('There has been a error: ' + err); } else{ console.log('Worked!'); } }); }); 

在browser.pressButton部分,它将确定我是否能够成功login或不是,取决于.message包含文本“在您的手机上input很臭,我们知道!仔细检查您的用户名和密码,然后再试一次。 “

但是,我不明白它是如何决定errcallbackerr 。 如果.message不存在于html中,那么我想要触发成功callback来转到下一个函数。

约定僵尸似乎用于callback来自node.js,其中第一个参数是一个错误对象,它应该在成功为null ,任何后续的参数是成功的情况下。 如果你定义了一个callback,你正在使用的库(在这种情况下为僵尸)将在asynchronous操作完成时执行你的callback函数。 当您调用callback时,意味着“OK,一个操作已经完成,您现在可以按照您认为合适的方式处理结果”。 你的代码需要看第一个参数来判断操作是成功还是失败。

当你接受一个callback函数作为参数,然后执行一些(可能是asynchronous的)操作时,callback是告诉调用库你完成的方法,并再次使用第一个参数来区分错误和成功。

你的困惑的一部分可能来自于你的browser.visitcallback函数签名是错误的。 你需要命名第一个参数来清楚地表明它是这样的错误:

 browser.visit("https://mobile.twitter.com/session/new", function (error, browser) { 

因此,在匿名callback函数的主体中,如果僵尸无法加载该页面,那么error参数将有关于错误的信息。 如果页面加载正确, error将为空, browser第二个参数可以用来进一步告诉僵尸在页面上做更多的东西。 这就是僵尸如何说:“我已经完成了visit操作,有时间来处理结果。”

visit不传递callback参数,您传递的匿名函数作为参数visit IS CALLBACK 。 你可以这样编码来澄清(尽pipe没有人)

 browser.visit("https://mobile.twitter.com/session/new", function callback(error, browser) { 

所以这是一个图书馆需要告诉你完成的callback。 你不要调用它。 库调用它,你把代码放在里面。

另一方面,当您的代码执行asynchronous操作时,您需要适当地调用作为函数参数接收的callback函数,以告诉调用者您已完成,以及是否成功失败。 在这种情况下,您不需要执行任何自己的asynchronous代码,因此不需要调用任何callback函数。