Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 设置状态在您完成后即完成';a.那么_Reactjs - Fatal编程技术网

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我已经更新了我的答案,请查收