2016-07-12 22 views
0

Hallo also ich habe gerade diese Funktion gemacht und ich versuche, die Daten zurück zu geben, aber aus irgendeinem Grund gibt es nicht die Daten zurück, aber die Funktion wird aufgerufen, als ich versucht, es zu protokollieren die Funktion wird ausgeführt, es funktioniert, aber es funktioniert nur die Daten zurück, wenn ich die FunktionNode js Rückgabefunktion gibt keine Daten zurück

verwenden möchten Wie Sie verwende ich die Funktion versucht, die zurückgegebenen Daten setzen in einem Array

Sie sehen können Vielen alle.

a.push(methods.UserInfo(id)); 

Hier ist der gesamte Code I

methods.UserDatas = ((client, json)=> { 
    let a = []; 
    if (json.Params.length > 0) { 
     json.Params.forEach((id)=>{ 
      if (id) { 
       a.push(methods.UserInfo(id)); 
      } 
     }); 
     let cmd = { 
      'Cmd': 'GetUserInfo', 
      'userinfo': a 
     }; 
     packet.send(client, JSON.stringify(cmd)); 
    } 
}); 

methods.UserInfo = ((id)=> { 
    sql.query('SELECT * FROM users WHERE ?',[{id:id}], (err, row)=>{ 
     if (err) { 
      throw err; 
     } else { 
      if (row.length > 0) { 
       let playerData = {}; 
       playerData.userid = row[0].id; 
       playerData.strGender = row[0].Gender; 
       playerData.Username = row[0].Username; 
       let items = {}; 
       sql.query('SELECT * FROM users_items WHERE ? AND equipped=1',[{userid:id}],(err,rows) => { 
        if (err) { 
         throw err; 
        } else { 
         if (rows.length > 0) { 
          for (var i =0; i< rows.length; i++) { 
           let item = DBData.items.get(parseInt(rows[i].itemid)); 
           items[rows[i].equipment] = { 
            'ItemID': item.id, 
            'File':item.File, 
           }; 
          } 
         } 
         playerData["equipment"] = items; 
         return playerData; 
        } 
       }); 
      } 
     } 
    }); 
}); 
+0

'a.push (methods.RetrieveUserInfo (id)) 'ist in Ihrem Code implementiert, aber die Methode heißt' UserInfo'. Ist es nur ein Tippfehler? –

+0

Ich bearbeitet es getippt, dass durch Zufall seine UserInfo (ID) – Wexo

+1

Mögliche Duplikat von [Wie gebe ich die Antwort von einem asynchronen Aufruf?] (Http://stackoverflow.com/questions/14220321/how-do-i-return -die-Antwort-von-einem-asynchronen Anruf) –

Antwort

1

Eine Asynchron-Funktion bin mit (wie zum Beispiel

sql.query('SQL', [{PARAM:VALUE}], (ERR, RESULT) => { CODE } 

) nicht Rückkehr als normale Funktion: Sie könnten nutzen promise s zum Beispiel (siehe here).

Und beachten Sie auch, dass eine sync Funktion eine eine Sync-Funktion aufrufen, nicht synchron Werte zurück kommen, dass eine Sync-Funktion ...

+1

Könnten Sie erklären ? Die '=>' -Syntax ist nicht asynchron. – gcampbell

+0

Eine Pfeilfunktion ist nicht unbedingt asynchron. Zwei der vier Pfeilfunktionen im angegebenen Code werden verwendet, die anderen beiden werden async verwendet. –

+0

Ja, richtig ... Ich ändere einfach meine Antwort ... Um mich besser zu erklären: '=>' bedeutet nicht unbedingt ** async zu sein, sondern im OP-Anwendungsfall ('sql.query (...) ') es ** ist ** async ... :-) – MarcoS