어젯밤에 간단한 JavaScript 배열로 정말 이상한 문제가 발생했습니다. 나는 Firebase 기반의 React Native 앱을 개발 중이고 SDK를 사용하여 실시간 데이터베이스로부터 데이터를 얻고 있습니다. 위의 코드에서 이후의 데이터를 각각의 사용자의 timeline
로부터 데이터를 얻을 timeline
에 posts
각 반복 후 얻을 것으로 예상되는JavaScript 배열이 반복 가능하지 않음
var app = this
this.props.fb.auth().onAuthStateChanged(function(user) {
if (user) {
app.props.fb.database().ref('/users/' + user.uid + "/timeline").once('value').then(function(snapshot) {
var posts = snapshot.val()
return posts
}).then((posts) => {
var statuses = [];
for (i in posts) {
app.props.fb.database().ref('/posts/' + posts[i]).once('value').then(function(snapshot) {
statuses.push(snapshot.val())
});
}
console.log(statuses)
})
}
});
: 여기
는 코드posts
. 그런 다음 데이터를
statuses
배열로 푸시합니다.이 배열은 마지막에 콘솔에 기록됩니다.
배열이 확장 될 때까지 콘솔에 배열의 항목이 표시되지 않습니다. 또한 배열의 length
을 가져 오려고하면 0이 반환되고 배열의 항목을 반복 할 수 없습니다.
내가 뭘 잘못하고 있니?
99/100 JS 오류는 비동기 문제 것 같다 -이 같은 보인다. u 비동기 호출로 채워지는 배열을 콘솔에 로그인 할 수 없습니다. –
['for..in']을 사용하여 배열을 반복해서는 안됩니다 (https://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-a-bad). -idea) 구조. ['Array.prototype.forEach()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)를 사용하십시오. – Phylogenesis