请考虑以下代码段:
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()
之前设置断点并等待一些当它被解雇的时候,代码就像预期的那样工作。
该代码有什么问题?
答案 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。
了解有关承诺的更多信息,