Как обрабатывать два сервисных звонка в одной кнопке отправки - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь реализовать экран "обновить пароль". У меня есть две функции вызова службы: первая - проверка пароля, который возвращает логическое значение, а вторая - обновление пароля. Условие состоит в том, что если первый ответ службы верен, то я хочу вызвать вторую службу. Проблема состоит в том, что когда я пытаюсь получить первый ответ на вызов службы до вызова второго вызова службы, эти службы выполняются параллельно после завершения функции отправки. Таким образом, они не выполняются подряд.

Я пытался вызывать эти веб-сервисы один за другим в разных функциях метода рендеринга, в то же время я добавил условие для проверки первого ответа веб-сервиса. Если я получаю от него данные ответа, я вызываю вторую функцию, которая вызывает второй веб-сервис.

   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 голосов
/ 05 июля 2019

Вы используете Redux, так что

Выполните проверку и второй вызов API componentWillReceiveProps () {} (в старом жизненном цикле)

вы получите значение validatePassword после первого вызова API, проверьте его в componentWillReceiveProps и выполните второй вызов API оттуда.

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

Удалить второй вызов API из нажатия кнопки, который является вашей функцией submit ()

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

       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);


      }
0 голосов
/ 05 июля 2019

Что если вы используете вложенные сетевые запросы, используя 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.
                }))
            )
    )
...