while循环取出所有文章(SteemJS) / 网络研习社#47

while循环取出所有文章(SteemJS) / 网络研习社#47

while.jpg

今天在做一些逻辑业务的时候,发现从steem中取出某位作者所有文章的方法不好调节,因为村长给出的是一个递归的写法,不太好理解(请原谅我水平不高),更不好调节了。所以,最后还是自己写一个实现,用起来更顺手些。

这是村长的递归函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function getPosts(author, startPermlink = null, limit = 100, posts = []) {
return new Promise((resolve, reject) => {
let beforeDate = new Date().toISOString().split('.')[0];
steem.api.getDiscussionsByAuthorBeforeDate(author, startPermlink, beforeDate, limit, function (err, result) {
//console.log(result);
if (result.length > 1) {
posts = [...posts, ...result];
//用的递归的方法
getPosts(author, result[result.length - 1].permlink, limit, posts)
.then(resolve)
.catch(reject);
} else {
resolve(posts);
}
});
});
}

取出某位作者所有文章的方法无非是一个循环

理解了这种循环的逻辑写起来其实更好理解一些,毕竟大家比较熟悉循环的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
getPosts(author, startPermlink, limit, posts) {
let that = this
return new Promise((resolve, reject) => {
let beforeDate = new Date().toISOString().split('.')[0]
that.steem.api.getDiscussionsByAuthorBeforeDate(author, startPermlink, beforeDate, limit, function (err, result) {
//做一次遍历去掉重复的文章
result.forEach(post => {
if (post.permlink != startPermlink) {
that.newposts.push(post)
}
})
resolve(result)
})
})
}

//mounted函数中
let _this = this
async function main(author, startPermlink, limit, posts){
while(true){
let result = await _this.getPosts(author, startPermlink, limit, posts)
//取到最后一篇文章的Permlink,做为下一次查询的起始点
startPermlink = result[result.length - 1].permlink
//如果只能查询到一篇文章,则这是最后一篇了,可以终止查询了
if(result.length == 1){
console.log(888, _this.newposts)
break;
}
}
}

//传入要查询的作者名,初始标签,一次查询的条数,初始化数组
main(this.$store.state.username, null, 5, [])

里面有个关键的接力棒(startPermlink),最后一篇文章作为下一次查询的起始点,不停循环,直到取到最后一篇文章为止。


This page is synchronized from the post: ‘while循环取出所有文章(SteemJS) / 网络研习社#47’

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×