如何在一个提交按钮中处理两次服务电话

时间:2019-07-05 06:26:10

标签: javascript react-native redux react-redux

我正在尝试实现“更新密码”屏幕。我有两个服务调用功能,第一个是验证密码,它返回布尔值,第二个是更新密码。条件是,如果第一个服务响应为true,那么我想调用第二个服务。问题是,当我尝试在调用第二个服务调用之前获得第一个服务调用响应时,这些服务将在Submit函数结束后并行执行。因此,它们不会连续执行。

我尝试在render方法的不同函数中逐个调用这些Web服务,同时我添加了一个条件来检查第一个Web服务响应。如果从中获得响应数据,则调用第二个函数,该函数调用第二个Web服务。

   render()
{
... // screen render method
..
<Button onPress={() => { this.submit(); }}>Change Password</Button>
}

//Here is the submit function:
 submit() {

//first service call
this.props.validatePassword(param1, param2, param3, param4);

//reducer writes its value to "validatePass" in mapStateToProps



    if (validatePass) {  //boolean check
       //second service call 
        this.props.updateStrongPassword(param1, param2, param3, 
        param4);  
    }
  }

///
const mapStateToProps = function (state) {
  const result = {
    strongPasswordData: state.UpdateInformationReducer.strongPasswordData,

    validatePass: state.UpdateInformationReducer.validatePass,
  };
  return result;
};


function bindAction(dispatch) {
  return {
    updateStrongPassword: (param1, param2, param3, param4) => dispatch(updateStrongPassword(param1, param2, param3, param4)),
    validatePassword: (param1, param2, param3, param4) => dispatch(validatePassword(param1, param2, param3, param4)),
  };
}

这些服务调用已成功执行,但没有连续执行。 完全没有错误。 预先非常感谢。

2 个答案:

答案 0 :(得分:0)

如果您使用fetch和Promises发出嵌套的网络请求,然后使用响应更新商店,该怎么办? 下面是一个简单的示例:

fetch("url").then(
        firstResponse => firstResponse.json()
            .then(fetch("anotherRequest")
                .then(secondResponse => secondResponse.json()
                .then(()=>{
                    // update your redux store here using firstResponse and secondReponse object.
                }))
            )
    )

答案 1 :(得分:0)

您正在使用Redux,

进行检查和第二次API调用componentWillReceiveProps(){}(在旧的生命周期中)

在第一个API调用从componentWillReceiveProps进行检查并从那里进行第二个API调用之后,您将获得validatePassword值。

recyclerView.computeVerticalScrollOffset()

从按钮单击中删除第二个API调用,这是您的commit()函数

componentWillReceiveProps(props){
   if (props.validatePass) { 
        this.props.updateStrongPassword(param1, param2, param3, 
        param4);  
    }
}