2016-04-09 1 views
0

Другой ответ, кажется, предполагают, что это должно работать (так не дубликат):не может получить значение с обратным вызовом - Javascript

Я пытаюсь быть в состоянии использовать результирующий объект вне этой функции. Я использовал обратный вызов, однако у меня все еще возникают проблемы.

exports.getArray = function(query, callback) { 
    connection.query('SELECT ' + query + ' FROM table', function(err, result) { 
     if (!err) { 
      var array = []; 
      for (var i = 0; i < result.length; i++) { 
       array.push({ 
        id: result[i].id, 
       }); 
      } 
      callback(array); 
      console.log('Retrieved Data'); 
     } else 
      console.log('Error while retrieving data.'); 
    }); 
} 

В другом файле

var data = []; 
database.getArray('*', function(result) { 
    // console.log(result); //works 
    data.concat(result); //need the result value 
}); 

console.log(data); // Outputs [] 

журнала:

[{ 
    id: 71, 
    author: 'catnip' 
}, { 
    id: 78, 
    author: 'cup49' 
}] 
+2

Строка, которая говорит 'console.log (данные); // Выходы [] 'запускаются немедленно, он не ждет, когда функция обратного вызова –

+0

изменит этот' data.concat (result); 'to' data = result; ' –

+1

_" Другой ответ, похоже, предполагает, что это должно работать (так не дубликат) _ _ - о каком другом ответе вы говорите? – Xufox

ответ

-1

Использование

data = result; 

или

data = data.concat(result); 

Метод concat возвращает новый массив. Он не изменяет массив, на который он вызывается.

+0

Это не проблема. – Andy

+0

К сожалению, я уже использую data = result; – user1212520

+0

Переместите 'console.log (data);' внутри вашей функции обратного вызова, как предложено выше mparnisari, чтобы он выполнялся только после получения вашего результата. – benzarras

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