【问题标题】:i have 2 asynchronous function and i want to get the 2 return value of asynchronous function at the same time. what to do? [closed]我有 2 个异步函数,我想同时获得 2 个异步函数的返回值。该怎么办? [关闭]
【发布时间】:2021-02-01 07:11:26
【问题描述】:

验证脚本

异步函数

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

      }
    });
  });
}

异步函数

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

      }
    });
  });
}

注册脚本

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

【问题讨论】:

标签: javascript php ajax asynchronous


【解决方案1】:

使用 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);
});

Learn more

【讨论】:

    【解决方案2】:

    在注册脚本中,你需要一个异步函数

      async function registerValidate(){
        if (Empty(username, "Username cannot be blank")) {
          unameStatus = false; // if false then no error on username input fields
          if (await 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 (await 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();
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2019-03-10
      • 2015-09-19
      • 2015-08-24
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多