2017-05-03 15 views
1

私はこのようなAPI:Socket.ioリターンサーバの応答

function movePlayer(x, y){ 
    if (x < 0 || y < 0) return true; 
    else return false; 
} 

、今私があれば、他のこのようなサーバ側にあるように、これだけの機能を変更したい:

クライアント側:

function movePlayer(x, y){ 
    var result; 
    socket.emit('move_player', { 
     _x: x, 
     _y: y 
    }); 
    socket.on('move_finished', function(data){ 
     result = data._result; 
    }); 
    return result; 
} 

サーバー側:

var result; 
socket.on('move_player', function(data){ 
    if (data._x < 0 || data._y < 0) result = false; 
    else result = true; 
    socket.emit('move_finished', {_result: result}); 
}); 

しかし、サーバの応答が非同期であり、クライアント側が応答を得るのを待たずに動作するため、動作しません。だから、関数定義だけを変更するだけでそれを行う方法はありますか?

+1

を来ることを願って、私はあなたが待つためにいくつかの約束を使用する必要がありますと思います申し訳ありません結果https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise – Jerome

+0

@Jeromeしかし、約束の '' then() 'メソッドで' '結果を返すことはできますか? ' –

+0

はい、あなたはそれを行うことができるはずです、私の答えを見てください – Jerome

答えて

0

それは本当に良いではないのですが、私は約束のプロではないよ、私はより多くの資格の誰かがここに

//somewhere else 
 
aFunction().then((result) => { 
 
      //do something with this result 
 
     }) 
 
     .catch(err => { 
 
      console.log(err); 
 
     }) 
 

 

 

 
aFunction = function(){ 
 
    return new Promise((resolve, reject) { 
 
     //some code that generates your result 
 
     if (result) { 
 
      resolve(result); 
 
     } else { 
 
      reject(error); 
 
     } 
 
    }); 
 
}

関連する問題