2013-04-27 2 views
-1

남자. js 콜백 리턴으로 일부 prolem을 해결할 수 없습니다. 그래서, 우리는 다음 FUNC 있습니다 : 나는 2 LVL 콜백에서 변수 행을 반환해야합니다nodejs 콜백에서 돌아 가기

 //Функция получения контакт листа пользователя 
     function get_contact_list(data) { 
      //Берем ID пользователя, который к нам пытается обратиться исходя из SESSION_ID 
      conn.query('SELECT id FROM users WHERE session_id="' + data['auth'] + '" LIMIT 1;', function(err, res) { 
       if (err) { 
        console.log(err); 
       } 
       //Разбираем результат 
       res.fetchAll(function(err, row) { 
        if (err) { 
         console.log(err); 
        } 
        //А теперь, собсна, выбираем контакты 
        conn.query('SELECT u.id, u.sname, u.fname, u.nick FROM users as u LEFT JOIN contacts AS c ON c.dep_id = u.id WHERE owner_id =' + row[0].id + ';', function(err, res) { 
         if (err) { 
          console.log(err); 
         } 
         //Разбираем результат 
         res.fetchAll(function(err, row) { 
          if (err) { 
           console.log(err); 
          } 
          //TAKE row HEREOF 
          NEED_OUT = row; 
         }); 
        }); 
       }); 
      }); 
      return NEED_OUT; 
     } 

을,하지만 난 글로벌 VAR을 만들거나 전역 개체에서 "행"을 작성하는 경우, 제대로 동작하지 않습니다. 나를 도와주세요 pls! 고맙습니다!

+0

비록 다른 상황이지만 동기식 및 비동기 코드에 대해 배우려면 내 대답을 읽어야합니다. http://stackoverflow.com/a/14220323/218196. 'get_contact_list'가 콜백을 받아들이고 DB 쿼리의 결과를 전달해야합니다. –

+0

나는이 코드의 가독성에 도움이 될 것이라고 생각한다. –

+0

행 개체를 저장할 위치를 결정하십시오. 콜백 함수를 매개 변수로 항상 전달할 수 있으며 행 값을 매개 변수로 전달하여 호출 할 수 있습니다 – Tushar

답변

3

저는 비동기 코드 개념을 제대로 이해하지 못했다고 생각합니다. 예를 들어 길게는 여기에 비동기 코드가 작동하는 모습을 나타내는 의사 코드가 있습니다.

// Timestamp: 0 
function foo(input, cb) { 
    // Timestamp: 2 
    doSomeThingAsync(input, (result) { 
     // Timestamp: 5 
     result = transformResultSync(result); 
     cb(result); 
    }); 
    // Timestamp: 3 
} 
// Timestamp: 1 
foo('bar', function(result) { 
    // Timestamp: 6 
    console.log(result); 
}); 
// Timestamp: 4 

조금 도움이 되었기를 바랍니다.