Вы делаете классическую ошибку при обработке асинхронных вызовов, как при синхронном программировании.
Я реструктурировал ваш код следующим образом:
function _getPrevActivity() {
let value = [];
let wait;
const path = "/users/RSgNDLPxT2aAERQutXEEyhHHJYk1/agreements/DkRdZ5kHi2g7MlBV3Kjq/test/test-something/records/15/history";
return firestore.collection(path).orderBy('timeStamp')
.onSnapshot(querSnap => {
querSnap.forEach(doc => {
value.push(doc.data())
console.log(value.length, " length")
});
console.log(value)
return value;
}).catch(error => {
console.log(error);
return value;
});
}
// calling function
function otherFunc() {
_getPrevActivity().then(value => {
// do something with value...
// value will not be an empty array now
console.log(value);
}).catch(console.log);
}
Ошибка, которую вы здесь делаете, состоит в том, что вы не можете действительно вернуть значение из анонимной функции querSnap => {...
, если вы также не вернете вложенное обещание от функции, из которой вы хотите вернуть значение.
Кроме того, для доступа к значению из return
асинхронного вызова потребуется использовать условие then()
, которое я добавил в код ниже.