1

コールバックの概念がわからないようです。私は以前に彼らと一緒に仕事をしたことがないので、我慢してください。手を濡らすために、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!');
        }

    });
});

.messagebrowser.pressButtonの部分で、 「電話の臭いを入力してください。ユーザー名とパスワードを再確認して再試行してください」というテキストが含まれているかどうかに応じて、ログインに成功したかどうかを判断します。

ただし、コールバックを起動する方法がわかりませんerr。がhtmlに存在しない場合.messageは、成功コールバックをトリガーして次の関数に移動したいと思います。

4

1 に答える 1

3

Zombieがコールバックに使用していると思われる規則は、node.jsに由来します。ここで、最初の引数はエラーオブジェクトでありnull、成功した場合に必要です。後続の引数はすべて成功した場合に使用されます。コールバックを定義すると、使用しているライブラリ(この場合はZombie)は、非同期操作が完了するとコールバック関数を実行します。コールバックが呼び出されると、「OK、操作が完了し、適切と思われる結果を処理できるようになりました」という意味になります。コードは、その最初の引数を調べて、操作が成功したか失敗したかを判断する必要があります。

コールバック関数を引数として受け入れてから、いくつかの(場合によっては非同期の)操作を実行すると、コールバックは、呼び出し元のライブラリに完了を通知し、その最初の引数を使用してエラーと成功を区別する方法です。

混乱の一部は、コールバックの関数シグネチャbrowser.visitが間違っているという事実に起因している可能性があります。次のようなエラーであることを明確に示すために、最初の引数に名前を付ける必要があります。

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

したがって、その匿名コールバック関数の本体で、ゾンビがそのページをロードできなかった場合、error引数にはエラーに関する情報が含まれます。ページが正しく読み込まれた場合、はerrornullになり、browser2番目の引数を使用して、ゾンビにページでさらに多くのことを実行するようにさらに指示できます。これは、ゾンビが「visit操作は完了しました。結果を処理する時間です」と言う方法です。

visitはコールバック引数を渡しません。引数として渡す無名関数はvisit ISTHECALLBACKです。明確にするために、このようにコーディングすることができます(誰もしませんが)

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

つまり、ライブラリが完了したことを通知する必要がある場合のコールバックです。あなたはそれを呼び出さない。ライブラリがそれを呼び出し、その中にコードを配置します。

一方、コードが非同期操作を行う場合は、関数の引数として受け取ったコールバックを適切に呼び出して、呼び出し元に完了したことと、失敗して成功したかどうかを通知する必要があります。この場合、独自の非同期コードを実行しないため、コールバック関数を呼び出す必要はありません。

于 2012-07-10T04:04:37.473 に答える