我有四个函数,每个函数内部都有一个循环。基于第一个函数循环的完成,应该调用第二个函数,第二个函数循环的完成应该调用第三个函数。
我使用了 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/