0

私はいくつかのテストを書いていますがcasperjs、私にとって本当に奇妙なことに出くわしました:

コードは次のとおりです。

casper.test.begin('Test', nbTests, function(test) {
    console.log(A_SERVER + A_IMPORT + A_IMPORT_TAB1);
    casper.start(A_SERVER + A_IMPORT + A_IMPORT_TAB1);    
    casper.waitForUrl(A_SERVER + A_IMPORT + A_IMPORT_TAB1, function (){
        console.log("ok");
    }, function(){
        console.log("nok");
    });
    console.log(casper.getCurrentUrl());
    casper.run(function(){
        test.done();
        this.exit();
    });
});

テストは正常に実行されますが、ログは次のように表示されます。

http://127.0.0.1:8000/import/upload/
http://127.0.0.1:8000/import/upload/
ok

最後の 2 つのログが逆になっている理由を教えてください。での関数の扱い方に関係しているとjavascript思いますが、もっと明確な説明が欲しいです。

4

1 に答える 1

2

.waitForUrl()バックグラウンド ジョブを作成して返します。リモート サーバーからの応答が到着すると、コールバック関数が呼び出されます。そのため、同期が表示されます

console.log(casper.getCurrentUrl());

最初。

すべての無名関数は javascript で非同期ですか?

いいえ。使用するフレームワークのドキュメントを読んで、どのコールバックがいつ呼び出されるかを確認してください。

一般に、多くの無名関数はイベント ハンドラー (イベントが発生したときにのみ呼び出される) として使用されるか、AJAX 応答の処理 (本質的に非同期) として使用されるため、非同期です。

于 2013-09-24T14:50:05.807 に答える