2017-05-03 2 views
1

Ich habe eine API wie folgt aus:Socket.io Rückkehr Serverantwort

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

und jetzt will ich nur diese Funktion ändern, so dass die if-else auf der Server-Seite ist wie folgt:

Client-Seite:

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; 
} 

Server-Seite:

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}); 
}); 

Aber es wird nicht funktionieren, da die Antwort des Servers asynchron ist und die Client-Seite nicht warten wird, um die Antwort zu erhalten. Gibt es eine Möglichkeit, dies zu tun, indem Sie nur die Funktionsdefinition ändern?

+1

Ich glaube, Sie müssen einige Versprechen verwenden, zu warten, das Ergebnis https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Promise – Jerome

+0

@Jerome Aber wie kann ich 'result;' in der 'then()' Methode eines Versprechens zurückgeben? –

+0

Ja, Sie sollten es schaffen, schauen Sie meine Antwort – Jerome

Antwort

0

Leider ist es nicht wirklich gut, aber ich bin kein Profi von Versprechen, ich hoffe, dass jemand mehr qualifizierte kommen hier

//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); 
 
     } 
 
    }); 
 
}