我熟悉异步编程和使用回调,但是我不熟悉使用 Promise。我有以下代码:
page.evaluate(function() {
elements.push(document.getElementById('form_username'));
elements.push(document.getElementById('form_password'));
return elements;
}).then(function(html){
console.log(html[0].className);
}).then( () => {
_page.close();
_ph.exit();
}).catch(err => console.log(err));
当我将它传递给'html'并尝试获取className时,我收到一条错误消息,指出未定义类型不存在0,我相信是这种情况,因为当我返回元素时,它不会等待HTML元素被推入因为它是异步的。我知道如果我使用回调,我可以使用回调(元素),但我不确定在这种情况下该怎么做。
编辑:page.evaluate() 是 phantomjs-node 使用的函数,可在此处找到https://github.com/amir20/phantomjs-node。这也只是一段代码。当只返回一个 HTML 元素时,我可以获得它的类名。像这样:
page.evaluate(function() {
return document.getElementById('form_username');
}).then(function(html){
console.log(html.className);
}).then( () => {
_page.close();
_ph.exit();
}).catch(err => console.log(err));