然后在()后面调用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
。
了解更多关于承诺,