Reactjs 设置状态在您完成后即完成';a.那么
我对此很困惑。我知道这与异步性质有关,但我无法让它以我需要的方式运行。Reactjs 设置状态在您完成后即完成';a.那么,reactjs,Reactjs,我对此很困惑。我知道这与异步性质有关,但我无法让它以我需要的方式运行。 我需要火箭筒,启动。完成后,此.setstate将运行,完成后,下一个将运行 .then(keyUid => { let updatedFamily = {...family, [keyUid]: [firstHousehold, lastHousehold, householdDropdown]}; this.props.firebase.db.ref('organization/'
我需要火箭筒,启动。完成后,此.setstate将运行,完成后,下一个将运行
.then(keyUid => {
let updatedFamily = {...family, [keyUid]: [firstHousehold, lastHousehold, householdDropdown]};
this.props.firebase.db.ref('organization/' + currentOrganization + '/members/' + keyUid ).set(
{
first: firstHousehold,
last: lastHousehold,
phone: phone,
email: email,
address: address,
address2: address2,
city: city,
zip: zip,
headOfHousehold: headOfHousehold,
}, (error) => {
if(error){
console.log(error);
}
else{
this.setState({ family: updatedFamily }, () => console.log(1));
}
})
})
.then(newHouseholdUid => {
console.log(2);
Object.keys(family).forEach(key => {
this.props.firebase.db.ref('organization/' + currentOrganization + '/members/' + key ).update({
family: 'howdly'
})
});
})
当前console.log(2)在console.log(1)之前运行。我希望在转到下一个之前解决此.setstate。然后
如何实现这一点?出于性能原因对批处理状态更新做出反应。 在将状态设置为updatedFammily的情况下,可以使用本地作用域对象来获取中间结果
let res = {}
...
.then(keyUid => {
let updatedFamily = {...family, [keyUid]: [firstHousehold, lastHousehold, householdDropdown]};
res.updatedFamily = updatedFamily;
this.props.firebase.db.ref('organization/' + currentOrganization + '/members/' + keyUid ).set(
{
first: firstHousehold,
last: lastHousehold,
phone: phone,
email: email,
address: address,
address2: address2,
city: city,
zip: zip,
headOfHousehold: headOfHousehold,
}, (error) => {
if(error){
console.log(error);
}
else{
this.setState({ family: updatedFamily }, () => console.log(1));
}
})
})
.then(() => {
console.log(2);
Object.keys(res.updatedFamily).forEach(key => {
this.props.firebase.db.ref('organization/' + currentOrganization + '/members/' +
key ).update({
family: 'howdly'
})
});
})
您也可以使用async await来解决这个问题,但这需要进行更多的更改
希望它有帮助这不会起作用,因为updatedFamily嵌套在firebase调用中否?在示例中,当I console.log时,它是未定义的@ibtsam@FabricioG我已经更新了我的答案,请查收