0

セッションIDを作成する関数を作成しました

sessionId = ot.create_session(location, function(sessionId){
    console.log('The session ID is: ' + sessionId + '++++++++');
    return sessionId;
});

関数内からセッションIDを印刷することはできますが、関数外からアクセスすることはできません。


それが失敗したので、関数を呼び出して、変数を関数に渡したいと思いました

sessionId = ot.create_session(location, function(sessionId){
    console.log('The session ID is: ' + sessionId + '++++++++');
    sendToUser(sessionId);
});

ただし、以前に宣言されたdataという変数である、より多くのデータを取得するには、sendToUserが必要です

だから..私はそれからします

sessionId = ot.create_session(location, function(sessionId){
    console.log('The session ID is: ' + sessionId + '++++++++');
    sendToUser(sessionId);
});

sendTo User(sessionId, data){
}

ただし、これも機能しません

コード全体は次の場所にあります:http://pastebin.com/CdV3rdh0

4

1 に答える 1

1

次のスニペット:

setTimeout(function() {
   console.log("I'm first! Am I?"); // #2
}, 0);

console.log("Hahah, I'm first!"); // #1

最初は「ははは、私が先だ!」と記録します。そして「私が先だ!私が?」コンソールに。なんで?

JavaScript インタープリターは、最初に関数を上から下に実行してから、他の処理を実行します (0 秒後にコールバック関数を実行するなど)。これは、javascript の関数は通常ノンブロッキングであり、IO は非同期で行われるためです。つまり、 setTimeout は、最初の引数として取得した無名関数が実行されるまで待機しませんが、ゼロ秒で実行される関数コールバックのみを登録します。インタープリターがファイルの最後に到達した直後に実行されます。

セッションを作成するにはファイルをディスクに書き込む必要があるためot.create_session、sessionId はコールバック関数内でのみ使用でき、そこから sessionId を取得することはありません。コールバック関数が呼び出されると、外側の関数はすでに実行を終了しているためです。そして、コンテキスト全体がすでになくなっています:)

とにかく、コールバック関数の外部からのセッション ID が必要なのはなぜですか? の 2 番目のパラメーターdatasendToUser、コールバック関数内でも使用できるようです。単に書くsendToUser(sessionId, data)

于 2012-07-21T03:01:28.723 に答える