Я использую client.stream () из драйвера Cassandra DB для извлечения больших наборов результатов, используя страницы, затем для каждого возвращаемого результата строки я помещаю его в массив, определенный в верхней части моей области видимости.
После того, как запросы завершены, я хочу вернуть свой массив, но он всегда возвращает 'undefined', и я угадываю его, потому что выборка запросов занимает много времени, поэтому Javascript продолжает выполнение оператора return до того, как объект станет четнымpopulated.
Для тех, кто не знаком с этим драйвером: client.stream - это функция, и для получения некоторых данных требуется некоторое время.Мне нужно подождать, пока это закончится, прежде чем возвращать объект!
Например
function foo() {
var resultArray: [];
var query = "select username from users where userRank = 3";
client.stream(query, {prepare: true})
.on('readable' function () {
var row;
while (row = this.read()) {
resultArray.push(row.username);
}
})
.on('end', function () {
return obj; // The object only exists in this scope but cant return from here
});
}
Когда я вызываю это var returned = foo();
, я получаю undefined
в качестве возвращаемого значения.