1
function findById(id) {
    var fullName = "";
    client.emit("findById", id, function(result){
        fullName = result.fullName;
    });
}

関数findByIdからフルネームを見つけたい

関数 findById result = "" を呼び出すと

4

1 に答える 1

4

同期させるには、関数をループでロックする必要があります。これを行うことはお勧めしません

function findById(id) {
   var fullname, waiting = true;

   client.emit("findById", id, function(result){
       fullname = result.fullName;
       waiting  = false;
   });

   while (waiting);
   return fullname;
}

メソッドが本質的に非同期であるという事実を受け入れ、結果をコールバックに渡すことをお勧めします。

function findById(id, callback) {
   client.emit("findById", id, function(result){
       callback(result.fullName);
   });
}

使用法は次のようになります。

findById(id, function(fullName) { /* ... */ });

アプリケーションでネストされたコールバックが問題になる場合は、 (Node とブラウザーで実行される) asyncのようなフロー制御ライブラリーを使用すると、物事がよりクリーンで読みやすくなります。

于 2013-03-18T05:14:03.893 に答える