2016-07-12 9 views
0

こんにちはを返しません。関数が実行され、それが正常に動作しますが、私はあなたが私がノードJSリターン機能はので、私はちょうどこの機能を作り、私はデータを返す作るしようとしているが、何らかの理由で、それはデータを返しませんが、私は時のログをコンソールを試みたとして関数が呼び出され、データ

ありがとう配列で返されたデータを置くしようとしている機能を使用しています見ることができるように機能

を使用する場合、それだけでデータを返すんすべて。

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

は、ここで私は

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)) 'があなたのコードに実装されていますが、そのメソッドの名前は' UserInfo 'です。それは単にタイプミスですか? –

+0

私はそれが入力された編集されている事故によってそののUserInfo(ID)の – Wexo

+1

可能な重複[私は非同期呼び出しからの応答を返すにはどうしますか?](http://stackoverflow.com/questions/14220321/how-do-i-return非同期呼び出しからの応答) –

答えて

1

非同期機能を使用しているすべてのコードの通常の機能としてはないリターンん(のような例

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

用):あなたが使用することができますpromises(例えば、hereを参照)。

そして同期機能を呼び出す同期機能は、同期している同期機能から来る値を返さないことにも注意してください...

+1

説明してください? '=>'構文は非同期ではありません。 – gcampbell

+0

矢印関数は必ずしも非同期である必要はありません。与えられたコードの4つの矢印関数のうちの2つはsyncで使用され、他の2つはasyncで使用されます。 –

+0

はい、そうです...私の答えを変えて...自分自身を説明するために、 '=>'は必ずしも非同期であることを意味するのではなく、OPの使用例( 'sql.query(...) ')** ** async ... :-) – MarcoS

関連する問題

 関連する問題