我正在使用 powerbi rest api 從活動頁面獲取切片器的狀態。為了只獲取狀態不為空的切片器,我撰寫了一個簡單的函式。但是,在 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);
})
uj5u.com熱心網友回復:
您看到的訊息與您的問題無關。這是控制臺的某些實作在記錄物件時顯示的標準資訊訊息,以幫助指出對物件的更改可能包含在日志中。
相反,主要問題是您在 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://www.uj5u.com/caozuo/517874.html
