作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在抓取对 Instagram 上的帖子点赞的用户列表。下面的代码运行得很好:
await click(post);
await sleep(500);
var users = await findAll(user);
var userNames = users.map(async user => {
var userNameText = await user.getText();
return userNameText;
});
var result = await Promise.all(userNames);
console.log(result); // ['user1', 'user2'...]
但点赞模式最初仅显示 10 个用户。要查看其他用户,您必须不断滚动,而它一次只加载一个子集。以下递归函数不断向下滚动,以增量方式加载单个用户,以达到我想要获得的用户数量:
let likers = [];
await (async function theLoop(i) {
await driver.sleep(400);
findAll(user).then(async t => {
let liker = await t[8].getText();
await scroll(find(modal)); //Scroll inside the modal
await likers.push(liker); //PUSH LIKER TO ARRAY
console.log(liker);
if (--i) {
theLoop(i);
}
});
})(60);
问题是我无法从此函数获取所有用户的列表。如果我执行 console.log(likers)
if 在填充数组之前立即触发。我在这个递归循环之后运行的任何函数都会发生同样的情况。我所做的一切都不起作用。
最佳答案
您的问题是您的递归函数不返回
任何内容,并且您既不等待findAll().then(…)
也不等待递归调用。另外,您在这里根本不需要递归,使用 async
/await
您可以(应该)编写一个简单的循环:
for (var i=60; --i; ) {
await driver.sleep(400);
const t = await findAll(user); // don't use `then`
let liker = await t[8].getText();
await scroll(find(modal));
likers.push(liker); // nothing to `await` here
console.log(liker);
}
关于javascript - 无法从递归 javascript 函数获取值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55764397/
我是一名优秀的程序员,十分优秀!