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

in #steemjiang5 years ago (edited)

while.jpg

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

这是村长的递归函数

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);
            }
        });
    });
}

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

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

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),最后一篇文章作为下一次查询的起始点,不停循环,直到取到最后一篇文章为止。

Sort:  

完了完了,看到程序就头痛,我要失业了😭

!shop

Posted using Partiko Android

放心,你这么厉害的写手失不了业!

你好鸭,lemooljiang!
@julian2013赠送1枚SHOP币给你!

目前你总共有: 28枚SHOP币

查看或者交易 SHOP币 请到 steem-engine.com.

无聊吗?跟我猜拳吧! **石头,剪刀,布~**

这么说我可以把过去的东西全复制出来?我正想弄出来将有价值的整理下。我想像我这样的电脑盲可能操作不了。

来自于 [WhereIn Android] (http://www.wherein.io)

可以的,试试新的利器,https://lemooljiang.github.io

怎么顺手怎么来

村长,还有很多函数的用法,这要到哪里去查呢?

https://github.com/Stormrose/steem-js/tree/master/doc 这个是目前整理的最好的doc,你可以看看。

感谢村长!