首页 > 解决方案 > i have 2 asynchronous function and i want to get the 2 return value of asynchronous function at the same time. what to do?

问题描述

Validation script

asynchronous function

function userNameValidation(input, message) {
  const formInput = input.value.trim();

  return new Promise((resolve, reject) => {
    $.ajax({
      type: "POST",
      url: "ajax/usernameAvailability.php",
      data: {
        username: formInput
      },
      success: (feedback) => {
        var convertedFeedback = JSON.parse(feedback);
        console.log(convertedFeedback);
        if (convertedFeedback.status === "alreadyTaken") {
          setErrorFor(input, message);
          reject(false);
        } else {
          setSuccessFor(input);
          resolve(true);
        }

      }
    });
  });
}

asynchronous function

function emailValidation(input, message) {
  const formInput = input.value.trim();

  return new Promise((resolve, reject) => {
    $.ajax({
      type: "POST",
      url: "ajax/emailAvailability.php",
      data: {
        email: formInput
      },
      success: (feedback) => {
        var convertedFeedback = JSON.parse(feedback);
        console.log(convertedFeedback);
        if (convertedFeedback.status === "alreadyTaken") {
          setErrorFor(input, message);
          reject(false);
        } else {
          setSuccessFor(input);
          resolve(true);
        }

      }
    });
  });
}

register script

if (Empty(username, "Username cannot be blank")) {
  unameStatus = false; // if false then no error on username input fields
  if (userNameValidation(username, "Username is already taken")) {
    unameStatus = false;
    registerUser(); // to register user

  } else {
    unameStatus = true; // if true then have error on username input fields
    registerUser();
  }

} else {
  unameStatus = true;
  //registerUser();
}



if (Empty(email, "Email cannot be blank")) {
  emailStatus = false; // if false then no error on username input fields
  if (emailValidation(email, "email is already taken")) {
    emailStatus = false;
    registerUser();
    to register user

  } else {
    emailStatus = true; // if true then have error on username input fields
    registerUser();
  }

} else {
  emailStatus = true;
  //registerUser();
}

标签: javascriptphpajaxasynchronous

解决方案


用于Promise.all组合来自不同 API 调用的响应,这样您就可以同时处理响应!

Promise.all([
    fetch('apiCall1'),
    fetch('apiCall2')
]).then(function (responses) {
    // Get a JSON object from each of the responses
    return Promise.all(responses.map(function (response) {
        return response.json();
    }));
}).then(function (data) {
    // Log the data to the console
    // You would do something with both sets of data here
    console.log(data);
}).catch(function (error) {
    // if there's an error, log it
    console.log(error);
});

学到更多


推荐阅读