2015-01-08 2 views
0

MariaSQL을 사용하여 NodeJS v0.10 응용 프로그램을 작성하고 있습니다.비동기 명령을 사용하는 함수에서 반환 값

행의 ID를 리턴하는 함수를 작성하고, 행이없는 경우 ID를 작성한 다음이를 리턴하려합니다.

이 내가 지금까지 무엇을 가지고 :

TuxDb.prototype.createIfNEDrinkCompany = function(drinkCompany) { 
this.client.query("insert into drink_company(drink_company_name) values(:drink_company) on duplicate key update drink_company_id=drink_company_id", 
    {'drink_company' : drinkCompany}) 
    .on('result',function(res) { 
    res.on('end',function(info){ 
     if (info.insertId > 0) { 
       return info.insertId; 
     } else { 
      this.client.query("select drink_company_id from drink_company where drink_company_name = :drink_company",{'drink_company' : drinkCompany}) 
       .on('result',function(res){ 
        res.on('row',function(row){ 
         return row.drink_company_id; 
        }); 
       }); 
     } 
    }); 
    }); 

} 

지금 문제가 비동기이기 때문에 값이 반환되기 전에, 함수가 종료 것입니다.

이 문제를 어떻게 해결할 수 있습니까?

+0

당신에게 'mariasql'이라는 새로운 태그를 추가했습니다. 그게 무슨 뜻인지 말해 주시겠습니까? [검색] (https://www.google.co.in/search?q=MariaSQL&oq=MariaSQL&aqs=chrome..69i57j69i60&sourceid=chrome&es_sm=93&ie=UTF-8&qscrl=1)은별로 좋아지지 않았습니다. – gideon

+0

google – ufk

답변

1

비동기 코드를 처리하는 nodej의 표준 방법은 메소드의 마지막 인수로 콜백 함수를 제공하고 비동기가 끝날 때마다 호출하는 것입니다. 콜백 함수의 표준 서명 (ERR, 데이터) - 당신은 여기에 대한 자세한 읽을 수 있습니다 : Understanding callbacks in Javascript and node.js

이 코드를 다시 쓰기 : 당신의 방법을 호출하는 코드에 다음

TuxDb.prototype.createIfNEDrinkCompany = function(drinkCompany, callback) { 
this.client.query("insert into drink_company(drink_company_name) values(:drink_company) on duplicate key update drink_company_id=drink_company_id", 
    {'drink_company' : drinkCompany}) 
    .on('result',function(res) { 
    res.on('end',function(info){ 
     if (info.insertId > 0) { 
       callback(null, row.drink_company_id); 
     } else { 
      this.client.query("select drink_company_id from drink_company where drink_company_name = :drink_company",{'drink_company' : drinkCompany}) 
       .on('result',function(res){ 
        res.on('row',function(row){ 
         callback(null, row.drink_company_id); 
        }); 
       }); 
     } 
    }); 
    }); 

} 

과를

db.createIfNEDrinkCompany(drinkCompany, function(err, id){ 
    // do something with id here 
}) 
+0

에서 노드 -mariasql 검색은 대체 패턴입니다. –

관련 문제