[英]JQuery promise: access to outside variable or passing results to IIFE inside .done
[英]Declare variable outside promise then, initialized inside promise then and access outside promise then
我需要訪問聲明為outSide類的outState
var,然后在promise then()
函數內的getData()
函數內進行設置。
循環完成后,在uss func內部,我需要訪問它,但我不能。
let outState = {};
class A extends Component{
getData(usr){
db.collection('a/'+usr+'/bb').get().then(snap=>{
for(i = snap.docs.length-1; i>=0; i--){
outState[usr] = [...outState[usr], snap.docs[i].data()];
}
});
}
usrs(usrs){
for(i = usrs.length-1; i>=0; i--){
this.getData(usrs[i]);
if(i===0){
this.setState({ ...this.state, ...outState });
}
}
}
}
我需要為循環更新外部狀態,否則可以在promise func內部設置狀態,但這會使我的應用變慢。 我只是想在promise之外訪問它,然后功能,然后在循環之外更新它。
我建議將您的組件重構為大致類似的形式,以使所有內容保持整潔:
class A extends Component{
constructor() {
super();
this.state = {
usersData: {}
}
}
getData(usr){
let dataForUser = {};
db.collection('a/'+usr+'/bb').get().then(snap=>{
for(i = snap.docs.length-1; i>=0; i--){
dataForUser[usr] = [...dataForUser[usr], snap.docs[i].data()];
}
});
return dataForUser;
}
usrs(usrs){
let data = {};
for(i = usrs.length-1; i>=0; i--){
let userData = getData(usrs[i]);
if(i===0){
data = {...data, ...userData};
}
}
this.setState({usersData: data});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.