在主函数中,我想调用一系列需要先等待上一个函数完成的函数。
我希望我的控制台输出:A,B,B,B,B,C,D。其中,对于snapPivot中的每个项目,B都会出现几次。
我现在得到的结果是:A,C,D,B,B,B,B
似乎getPivot函数没有等待内部循环完成。在继续进行console.log('b')
和console.log('c')
console.log('d')
完成内部循环。
主要功能:
dashboardListner
.child(activeDashboardId)
.child('widgets')
.once('value', snap => {
widgets = snap.val();
})
.then(thenWidgets => {
async function asyncCall() {
console.log('A');
Object.entries(thenWidgets.val()).map(async function(widget) {
return await getPivot(widget, userId);
});
console.log('C');
}
return asyncCall();
})
.then(pivotData => {
async function asyncCall2() {
console.log('D');
return await getMain(pivotData);
}
return asyncCall2();
})
getPivot函数:
const getPivot = (widget, userId) => {
return new Promise(resolve => {
const pivotData = {};
//Get get pivot table name
const pivotName =
'user' + widget[1].type.charAt(0).toUpperCase() + widget[1].type.slice(1);
//Get pivot data into widget object
const pivotRef = firebase
.database()
.ref()
.child(pivotName)
.child(userId);
pivotRef
.once('value', snapPivot => {
return Promise.all([
snapPivot.forEach(function(result) {
if (result.val().widgetId === widget[0]) {
pivotData[result.key] = result.val();
console.log('B');
}
}),
]);
})
.then(() => {
resolve(pivotData);
});
});
};