我正在使用从活动页面获取切片器的状态。为了只得到状态不为空的切片器,我编写了一个简单的函数。但是,在console.log语句中,我看到“这个值是在第一次展开时计算出来的”,因此我的var是空的。
//TODO: not working
async function getSlicersStates(reportObj) {
// let states = []; //Also empty
const page = await reportObj.getActivePage(); //Get page
const visuals = await page.getVisuals(); //Get visuals
visuals.forEach(async function(vis){
let states = [];
if (vis.type == "slicer") { //filter all but slicers
let state = await vis.getSlicerState(); //get state of each slicer
if (state.filters.length > 0) {
// Push state and title
states.push({ title: vis.title, data: state});
}
}
return states; //Empty == this value was evaluated upon first expanding
});
}
我试着把“返回状态”放在不同的地方,但这并没有帮助。
我如何调用这个函数
getSlicersStates(reportObj)
.then(function(states) {
console.error(states); //this value was evaluated upon first expanding
})
.catch(function(err) {
console.error(err);
})
发布于 2022-10-13 12:20:50
你看到的信息与你的问题无关。这是控制台的一些实现在记录对象时显示的标准信息消息,以帮助指出对对象的更改可能包含在日志中。
相反,主要问题是在getSlicersStates中没有返回语句。在.forEach
中有一个,但这没有任何效果。.forEach
不注意返回值。您似乎还期望.forEach
等待异步事务的完成,但它不会这样做。
如果您希望有一个等待的异步循环,则不能使用.forEach
。以下是另一种选择:
async function getSlicersStates(reportObj) {
const page = await reportObj.getActivePage(); //Get page
const visuals = await page.getVisuals(); //Get visuals
let states = [];
for (const vis of visuals) {
if (vis.type == "slicer") { //filter all but slicers
let state = await vis.getSlicerState(); //get state of each slicer
if (state.filters.length > 0) {
// Push state and title
states.push({ title: vis.title, data: state});
}
}
}
return states;
}
https://stackoverflow.com/questions/74055310
复制相似问题