对于使用Node.js进行网络抓取是新手,对于JS中的promises概念也是新手,如果这个问题看起来有点基础,请您道歉。我正在尝试获取Google云端硬盘上某个元素的颜色,然后,如果以前未找到该颜色,请对该元素执行进一步的操作。问题是代码没有按照编写的顺序运行。
在此示例代码中,控制台返回所有元素,然后返回所有颜色,其中应为元素,颜色,元素,颜色...
实际:
WebElement
WebElement
WebElement
WebElement
rgba(38, 166, 154, 1)
rgba(38, 166, 154, 1)
rgba(216, 27, 96, 1)
rgba(38, 166, 154, 1)
预期:
WebElement
rgba(38, 166, 154, 1)
WebElement
rgba(38, 166, 154, 1)
WebElement
rgba(216, 27, 96, 1)
WebElement
rgba(38, 166, 154, 1)
代码
function getUserColors() {
var promise = driver.findElements(webdriver.By.className('docs-revisions-tile-swatch'))
.then(function(userColors) {
var outputColors = [];
for(var i=0; i<userColors.length;i++){
console.log(userColors[i]);
userColors[i].getCssValue('background-color').then(function(color) {
console.log(color);
if(!outputColors.includes(color)){
outputColors.push(color);
// Do some processing
}
});
}
return true;
});
return promise;
}
如何使代码按顺序而不是如图所示运行?
干杯, 迈克尔