最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

JavaScript闭包和异步函数参数

运维笔记admin18浏览0评论

JavaScript闭包和异步函数参数

JavaScript闭包和异步函数参数

我一直在尝试搜索SO,但是仍然没有运气,我需要将以下“属性”参数传递给匿名函数,但是由于关闭它无法访问。

什么是最好的存档方式? (页面是来自Puppeteer的对象):

getCssProperty: async function(selector, property) {
    await page.waitForSelector(selector);
    var val = await page.$eval(selector, x => {

        return window.getComputedStyle(x).getPropertyValue(property); <- here it does not work, undefined
    });
    return val;
},
回答如下:

从技术上讲,从Java脚本的角度来看,您的代码是正确的,property 应该page.$eval回调中可用。但是page。$ eval的特殊之处在于它的回调是在无头浏览器中]执行的,并且与node.js方法和变量完全分开。

因此,为了在那一侧使用属性,我们需要将其专门传递给page。$ eval回调。

请参见语法in the docs:

page。$ eval(selector,pageFunction [,... args])

args是我们要传递的任何变量,必须使用JSON.stringify()进行序列化。

因此,这是解决getCssProperty的方法:

getCssProperty: async function(selector, property) {
    await page.waitForSelector(selector);
    var val = await page.$eval(selector, (x, property) => { // <-- accept here the element AND arguments

        return window.getComputedStyle(x).getPropertyValue(property);

    }, 
    property // <-- pass property over to page.$eval callback
    ); 
    return val;
},
发布评论

评论列表(0)

  1. 暂无评论