繁体   English   中英

Node.js回调

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM