考虑以下代码片段:
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/