1
考虑下面的代码片断:梦魇)调用立即评估后()
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()
前等待时,它的发射一些时间),代码工作,因为它的准确预期。
该代码有什么问题?
'决心(空,1234)'为什么你传递*空*但预计* 1234 *? – str
因为,如果根据规范,第一个参数是错误的结果(而不是使用'reject()')传递给'catch()'。但是我需要调用'then()'函数,因此,我将'null'作为第一个参数。尽管这并不重要。真正重要的是'then()'在* setTimeout()结束并调用'resolve()'之前雇用*。 – impulsgraw
你不会返回任何东西。在[.evaluate']文档中有一个使用Promise的例子(https://github.com/segmentio/nightmare#evaluatefn-arg1-arg2)。 – str