2016-07-25 4 views
-1

У меня есть эта функция для подключения к моей БД и проконсультируйтесь с ней.Передайте результат от функции к другой функции на nodejs

function conn (text){ 
var mysql  = require("mysql"); 
var connection = mysql.createConnection({ 
    connectionLimit : 100, //important 
    host  : 'xxx.xxx.xxx.xxx', 
    user  : 'xxxxxx', 
    password : 'xxxxxxx', 
    database : 'xxxxxxxx' 
}); 

connection.connect(); 

var queryString = 'SELECT usuario.idUsuario FROM usuario WHERE usuario.nickname = ' + '"' + text + '"'; 

function getID(text, callback){ 
connection.query(queryString, function(err, rows, fields) { 
    var id; 
    if (err){ 
     callback(err, null); 
    }else{ 
     for (var i in rows) { 
      id = rows[i].idUsuario; 
     } 
     callback(null, id); 
    } 
}); 
} 

var result; 
    getID(text, function(err, content) { 
    if (err) { 
     console.log(err); 
    } else { 
     result = content; 
    } 
}); 
connection.end(); 
}; 

Теперь мне нужно получить результат в другой переменной, чтобы использовать его в других функциях внутри моего JS-файла. Как я могу получить это значение без кода внутри переменной?

+2

Вы не можете сделать это. Вы должны использовать обратные вызовы или обещания повсюду. http://blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks

+0

im использование calback в функции getID, но, возможно, что-то не так с этими обратными вызовами –

+0

Вам нужно вернуть значение из вашей функции используя обратный вызов тоже. – SLaks

ответ

0

Ваш function conn (text) извлекает данные с помощью обратных вызовов, вам необходимо перенести этот шаблон полностью на потребительский код. Я не уверен, что «другие функции» выглядят, но давайте представим, что один выглядит следующим образом:

function awesomeFunction() { 
    var sweetResult = conn('sweet nickname'); 
    alert(sweetResult); 
} 

conn собирается подключиться и выдать запрос к вашей БД. Вы делаете не хотите остановить все остальное и дождаться возврата результата, вы хотите, чтобы библиотека db вызывала вас, когда у нее есть результаты, следовательно, обратные вызовы. Поскольку база данных не останавливает все, управление возвращается к вашей функции conn, а затем возвращается к awesomeFunction и переходит к следующей строке alert(sweetResult). Но ждать! Вы ничего не вернули от conn, но что более важно, база данных даже не перезвонила с результатами!

Итак, вам нужно awesomeFunction, чтобы выглядеть следующим образом:

function awesomeFunction() { 
    conn('sweet nickname', function(err, sweetResult) { 
    alert(sweetResult); 
    }); 
} 

Это означает, conn потребности принимать и использовать функцию обратного вызова тоже:

function conn (text, resultsAreInCB){ 
    ... 
    connection.query(queryString, function(err, rows, fields) { 
    var id; 
    connection.end(); 
    if (err){ 
     resultsAreInCB(err, null); 
    } else { 
     for (var i in rows) { 
     id = rows[i].idUsuario; 
     } 
     callback(null, id); 
    } 
    }); 
    ... 
}; 
+0

Спасибо, он отлично работает. После проверки на моем коде я понял, как он работает. –