然后在()后面调用evaluate()

考虑下面的代码片段:

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 1234而是SUCCESS 1234

我正在做这个实验,并且已经理解,如果在.evaluate() .wait(15000)之前调用.wait(15000) (或者在.evaluate()之后和.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); }); 

它有什么作用? 它返回一个承诺。 所以代码将等待解决。

另外,如果你想获得1234,你必须parsing1234,而不是null

了解更多关于承诺,