Nightmare then()在evaluate()

时间:2017-11-18 00:24:47

标签: 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

我正在尝试这一点并明白如果在该链中的.wait(15000)之前调用.evaluate()(或在.goto()之后和.evaluate()之前设置断点并等待一些当它被解雇的时候,代码就像预期的那样工作。

该代码有什么问题?

1 个答案:

答案 0 :(得分:0)

考虑以下答案,

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

它做什么?它返回一个承诺。所以代码会一直等到它解决了。

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

了解有关承诺的更多信息,