2014-02-04 2 views
0
function searchCoords(){ 
    var result = result; 
    connection.query('SELECT * FROM monitoring', function(err, result){ 
    if(err){ 
     console.log(err); 
    } 
    return{ 
     result: result}; 
    }); 
} 

Это мой код. Я использую этот код, чтобы найти последние координаты некоторых устройств и отображать их на картах Google. но я должен сначала быть в состоянии получить доступ к массиву из так я находящиеся могу сделать что-то вроде:Node.JS MySQL запрос вложенных функций возвращающий массив

myModule.searchCoords().result 

или myModule.searchCoords()().result

Однако я до сих пор не может получить доступ к массиву (результат) от внешней стороны функции, не говоря уже о другом модуле. Я читал о закрытии, областях, вложенных функциях, анонимных функциях и т. Д., Но я до сих пор не могу найти решение. Что я делаю не так?

ответ

1

Проблема в том, что запрос является асинхронным, поэтому он не может вернуть значение в нормальном потоке. Если вы передадите функцию при вызове searchCoords, тогда эта функция может быть вызвана после того, как результаты вернутся - что может быть после долгой задержки. Это необходимо для предотвращения блокировки потока программы, пока выполняются потенциально длительные операции.

// accept a callback function to execute after getting results... 
function searchCoords(callback){ 
    var result = result; 
    connection.query('SELECT * FROM monitoring', function(err, result){ 
    if(err){ 
     console.log(err); 
    } 
    // run the callback function, passing the results... 
    callback({result: result}); 
    }); 
} 

// call like this... 
// pass a function accepting results object that will be executed as callback 
// once results have been returned... 
searchCoords(function(resultsObject){ 
    console.log(resultsObject.result) 
}) 
+0

спасибо, что работал, теперь я могу назвать переменную с внешней стороны и показать это нравится: database.searchCoords (функция() {resultsObject resultsObject.result; }); еще есть еще одна вещь, которую я хотел бы сделать ... есть способ конвертировать функцию обратного вызова в переменную, которая будет возвращать точно так же, как результат, поэтому я могу назвать это из карт Google api, как: 'variable [0] [1]' – arrigonfr

+0

Я не совсем уверен, что вы имеете в виду - я думаю, вам стоит задать вопрос о переполнении стека;) –

Смежные вопросы