首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JS:几个异步函数返回“这个值是在第一次展开时计算的”

JS:几个异步函数返回“这个值是在第一次展开时计算的”
EN

Stack Overflow用户
提问于 2022-10-13 11:53:23
回答 1查看 72关注 0票数 0

我正在使用从活动页面获取切片器的状态。为了只得到状态不为空的切片器,我编写了一个简单的函数。但是,在console.log语句中,我看到“这个值是在第一次展开时计算出来的”,因此我的var是空的。

代码语言:javascript
运行
复制
//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
    });
}

我试着把“返回状态”放在不同的地方,但这并没有帮助。

我如何调用这个函数

代码语言:javascript
运行
复制
getSlicersStates(reportObj)
.then(function(states) {
    console.error(states); //this value was evaluated upon first expanding
})
.catch(function(err) {
    console.error(err);
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-13 12:20:50

你看到的信息与你的问题无关。这是控制台的一些实现在记录对象时显示的标准信息消息,以帮助指出对对象的更改可能包含在日志中。

相反,主要问题是在getSlicersStates中没有返回语句。在.forEach中有一个,但这没有任何效果。.forEach不注意返回值。您似乎还期望.forEach等待异步事务的完成,但它不会这样做。

如果您希望有一个等待的异步循环,则不能使用.forEach。以下是另一种选择:

代码语言:javascript
运行
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74055310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档