node.js - Nightmare then() 在评估()之后立即调用

标签 node.js web-scraping electron es6-promise nightmare

考虑以下代码片段:

nightmare
    .evaluate(function (resolve){
        setTimeout(function () {
            resolve(null, 1234);
        }, 1500)
    })
    .then(function (result) {
        console.log('SUCCESS', result);
    })
    .catch(function (e) {
        console.log('ERROR', e);
    });

假设之前已经初始化了nightmare实例,我还使用了goto()inject()等方法(那部分代码非常庞大,但如果有必要,我可以尝试清理它以呈现在那里)。但我最终得到的结果 - 不太可能是 SUCCESS null 而不是 SUCCESS 1234

我正在对此进行实验,并且了解到如果在该链中的 .evaluate() 之前调用 .wait(15000) (或者在 之后设置断点.goto() 以及在 .evaluate() 之前并在触发时等待一段时间),代码将按照预期工作。

该代码有什么问题?

最佳答案

考虑以下答案,

nightmare
    .evaluate(function (){
       return new Promise((resolve, reject)=>{        
        setTimeout(function () {
            resolve(1234);
        }, 1500)
       })
    })
    .then(function (result) {
        console.log('SUCCESS', result);
    })
    .catch(function (e) {
        console.log('ERROR', e);
    });

它有什么作用?它返回一个 promise 。因此代码将等待直到解决。

此外,如果您想获得 1234,而不是 null,则必须解析 1234。

了解有关 promise 的更多信息,

关于node.js - Nightmare then() 在评估()之后立即调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47361196/

相关文章:

node.js - 使用nodejs调用Stripe API获取total_count

javascript - 有没有一种方法可以在Electron中为子窗口设置属性?

python - 无法使用 Python 抓取具有不变 URL 的多个页面

python - Scrapy-splash response.css() 获取不到元素

javascript - 将html元素拖到 Electron 窗口外以复制本地文件?

angular - 如何在 Typescript 中编译单个文件?

javascript - discord.js 将消息作为代码块发送?

node.js - 使用 node sharp 包调整图像大小并上传到 s3 时,它会旋转

node.js - Incontext Paypal Integration-无需离开站点 [Nodejs, Expressjs]

python - 美丽汤中的名称错误