首页 > 解决方案 > 另一个函数中的Javascript异步函数

问题描述

我正在尝试在另一个函数中调用异步函数。但是,当我单击网络选项卡时,它不会创建任何发布请求。这里可能是什么问题?

var onComplete = function() {
  // CALLING THE ASYNC FUNCTION HERE ---> { NOT WORKING }
  updateProfile()
}

async function updateProfile(){
  var dataString = {
    name: questions[0].answer,
    gender: questions[1].answer,
    dob: questions[2].answer,
    country: questions[3].answer,
    interested: questions[4].answer,
  };
  let xhr = new XMLHttpRequest();
  xhr.open("POST", "processes/onboard.php", true);
  xhr.onload = ()=> {
    if(xhr.readyState === XMLHttpRequest.DONE) {
      if(xhr.status === 200) {
        // SUCCESS
      }
    }
  }
  let formData = new FormData(form);
  xhr.send(JSON.stringify(dataString));
}

标签: javascript

解决方案


我不是超级专家,但我们可以应用一些建议

  1. 将函数一分为二以获得更干净和可维护的代码,这意味着两个async/await块:

IE

    function resolveRequestAfter2Seconds() {
      return new Promise(resolve => {
        setTimeout(() => {
          resolve('resolved');
        }, 2000);
      });
    }
    
    async function asyncCall() {
      const result = await resolveRequestAfter2Seconds();
      console.log(result);
    }
    
    asyncCall();
  1. 用于promise.all获取一系列承诺,并在每个单独的交易详情调用完成后返回一个包含您的交易的数组。

IE

async (transactionKey, page) => {

  const api = `https://api/....`;
  const response = await axios.get(api);
  
  // create an array of promises and wait for
  // all of them to resolve before continuing

  const transactions = await Promise.all(
    response.data.map(async item => {
      const { id, transaction_id } = item;

      // get transaction details for each item in the array
      const _details = await transactionDetails(transaction_id);

      return {
        id,
        _details,
        transactionId: transaction_id,
      };
    })
  );
  return transactions;
};

推荐阅读