今天在做一些逻辑业务的时候,发现从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) { 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) }) }) }
let _this = this async function main(author, startPermlink, limit, posts){ while(true){ let result = await _this.getPosts(author, startPermlink, limit, posts) 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’