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