[英]Node.js callback
我似乎无法掌握回调的概念。 我没有和他们一起工作,所以请耐心等待。 为了弄湿我的手,我正试着用zombie.js登录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部分,它将确定我是否能够成功登录,具体取决于.message
包含文本“在手机上打字很.message
,我们知道!请仔细检查您的用户名和密码,然后重试。 “
但是,我不明白它是如何决定触发回调err
。 如果.message
中没有.message
,那么我想触发成功回调以转到下一个函数。
Zombie似乎用于回调的约定来自node.js,其中第一个参数是一个错误对象,成功时应为null
,任何后续参数都是成功案例。 如果您定义了一个回调,那么您正在使用的库(在本例中为Zombie)将在异步操作完成时执行您的回调函数。 当你的回调被调用时,它意味着“好的,操作已经完成,你现在可以按照你的需要处理结果”。 您的代码需要查看第一个参数以确定操作是成功还是失败。
当您接受回调函数作为参数然后执行一些(可能是异步的)操作时,回调是您告诉调用库已完成的方式,并再次使用第一个参数来区分错误和成功。
你混淆的部分原因可能是你对browser.visit
回调的函数签名是错误的。 你需要命名第一个参数,以清楚地表明它是这样的错误:
browser.visit("https://mobile.twitter.com/session/new", function (error, browser) {
所以在匿名回调函数的主体中,如果僵尸无法加载该页面,则error
参数将包含有关错误的信息。 如果页面加载正确,则error
将为null, browser
第二个参数可用于进一步告诉zombie在页面上执行更多操作。 这就是Zombie所说的“我完成了visit
操作,是时候处理结果了。”
visit
不传递一个回调参数,你传递的匿名函数作为参数来visit
IS CALLBACK 。 你可以这样编码来澄清(虽然没有人这样做)
browser.visit("https://mobile.twitter.com/session/new", function callback(error, browser) {
所以当图书馆需要告诉你它完成时,这是一个回调。 你没有调用它。 库调用它并将代码放入其中。
另一方面,当您的代码执行异步操作时,您需要适当地调用作为函数参数接收的回调,以告诉调用者您已完成以及失败是否成功。 在这种情况下,您不会执行任何自己的异步代码,因此您无需调用任何回调函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.