最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

JavaScript闭包和异步函数参数

IT培训 admin 9浏览 0评论

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;
},

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. 暂无评论