javascript - 如何在每个函数中使用循环对多个函数进行异步处理

标签 javascript ecmascript-6

我有四个函数,每个函数内部都有一个循环。基于第一个函数循环的完成,应该调用第二个函数,第二个函数循环的完成应该调用第三个函数。

我使用了 async 和 await,但没有用。

谁能告诉我我的代码有什么问题?

第一个函数:

selectedUser = (userName, userId) => {
  this.isFilterByNameSelected = true;
  this.props.dispatch(fetchDuesChitties()).then((datas) => {
    Object.keys(datas).map((key) => {
      if (datas[key].chittieUsers) {
        let chittieUsers = datas[key].chittieUsers;
        Object.keys(chittieUsers).map((userKey) => {
          if (chittieUsers[userKey].userId === userId) {
            this.userTicketNumber[key] = {
              name: userName,
              chitId: datas[key].chitId,
              chittieId: key,
              chitName: datas[key].chitName,
              chittieName: datas[key].chittyName,
              auctionsCompleted: datas[key].auctionsCompleted,
              userId: userKey
            };
          }
        });
      }
    });
    this.getChittiePayment();
  });
};

第二个功能:

 getChittiePayment = () => {
  Object.keys(this.userTicketNumber).map((key) => {
    let totalAmount = 0;
    let auctionsCompleted = this.userTicketNumber[key].auctionsCompleted;
    let chitId = this.userTicketNumber[key].chitId;
    let paymentDetails = this.props.chits[chitId].paymentDetails;
    for (var i = 0; i < auctionsCompleted; i++) {
      totalAmount += parseInt(paymentDetails[i].dueAmount);
    }
    this.userTicketNumber[key].totalAmount = totalAmount;
  });
  this.getUsersDuePayment();
}

第三个功能:

getUsersDuePayment = () => {
  Object.keys(this.userTicketNumber).map((key) => {
    let customerId = this.userTicketNumber[key].userId;
    let auctionsCompleted = this.userTicketNumber[key].auctionsCompleted;
    this.props.dispatch(fetchPaymentsByUserId(customerId, auctionsCompleted)).then((payments) => {
      this.userTicketNumber[key].amountPaid = payments;
    });
  });
  this.getBalanceAmount();
}

第四个功能:

getBalanceAmount = () => {
  Object.keys(this.userTicketNumber).map((key) => {
    let userKey = this.userTicketNumber[key];
    if (userKey.totalAmount && userKey.amountPaid) {
      let balanceAmount = userKey.totalAmount - userKey.amountPaid;
      this.userTicketNumber[key].pendingAmount = balanceAmount;
    }
  });
  this.setState({ userFilter: this.userTicketNumber });
}

最佳答案

为了完成这项工作,您必须从第二个和第三个函数返回一个 promise 。试试下面的例子。希望这对您有所帮助。

async function First(){
 console.log('Firts Func started');
 await Second();
 console.log('End');
}
function Second(){
  return new Promise(async (resolve,reject)=>{
  console.log('At Second Function');
  await Third();
  console.log('Second func end');
  resolve('Data From Second function');
 });
}
function Third(){
 return new Promise(async (resolve,reject)=>{
 console.log('At Third Function');
 await Fourth();
 console.log('Thidr func end');
 resolve('Data From Third function');
});
}
function Fourth(){
   return new Promise((resolve,reject)=>{
   console.log('At Fourth Function');
   console.log('Fourth func end');
   resolve('Data From Fourth function');
  });
}
First();

关于javascript - 如何在每个函数中使用循环对多个函数进行异步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53880062/

相关文章:

javascript - 堆叠列未与 Highcharts 对齐

javascript - 将输入字段的值添加到 anchor /链接标签

javascript - 如何处理复选框数组的状态?

javascript - 如何通过多个条件过滤数组但保持其当前状态?

javascript - 如何使用 jquery 在 HTML Canvas 中的选定图像对象中添加渐变效果

java - Flash SWF 能否以任何方式与 Java applet 通信,反之亦然?

javascript - 如果事件没有发生,替代操作 javascript/jquery

javascript - 在 ES6 中,将 ExecutionContexts 视为 JavaScript 虚拟机的堆栈框架是否正确?

javascript - 重构 JavaScript ES6

javascript - 为摩卡测试引用环境变量