问答详情
源自:3-12 目录功能实现

this.book.ready.then(()=>{ this.navigation=this.book.navigation console.log(this.navigation) return this.book.locations.generate()

this.book.ready.then(()=>{

this.navigation=this.book.navigation

console.log(this.navigation)

return this.book.locations.generate()

这个book.ready是epub.js的方法 主要作用是初始化吗?  还有generate()是什么方法?出处是哪里呐?

提问者:qq_梦紫菱_0 2018-08-30 09:29

个回答

  • Sam
    2018-08-30 11:37:24

    你好,这个问题涉及epubjs的实现原理

    • book.ready的用途:

    this.book.ready返回的是一个Promise对象,他的作用是让我们可以在Book对象初始化完毕后实现我们自己的逻辑,this.book.ready对应的源码如下:

    this.ready = Promise.all([
     this.loaded.manifest,
     this.loaded.spine,
     this.loaded.metadata,
     this.loaded.cover,
     this.loaded.navigation,
     this.loaded.resources
    ]);

    可以看到ready的定义是当manifest、spine、metadata、cover、navigation、resources这些资源都加载完毕后才会执行。


    • Locations.generate()方法的用途:

    generate()是Locations对象的一个方法,Locations对象的主要作用是实现电子书的定位,Locations对象在Book对象中进行实例化,实例化的源码如下:

    this.locations = new Locations(this.spine, this.load.bind(this));

    所以我们需要通过this.book.locations来引用Locations对象,generate()方法的用途是生成分页,其主要用途是根据指定字数进行分页,如果不指定参数时,默认会按照200个字符进行分页,generate()会返回一个Promise对象,你可以打印一下返回结果就知道生成的内容了。

    this.book.ready.then(() => {
      return this.book.locations.generate(500)
    }).then(location => {
      console.log(location)
    })