UnhandledPromiseRejectionWarning TypeError: Невозможно создать свойство 'height' - PullRequest
0 голосов
/ 16 октября 2018

Свойство 'height' не сохраняется в levelDB.Я использую обещания в первый раз, хотя.Пожалуйста, простите мою невиновность здесь.Я могу понять, почему данные не сохраняются в levelDB.

Вот код для блокчейна:

class Block{
    constructor(data){
     this.hash = "",
     this.height = 0,
     this.body = data,
     this.time = 0,
     this.previousBlockHash = ""
    }
}

class Blockchain{
  constructor(){
    //Get block height from levelDB
    levelDB.getDBBlockHeight().then(height => {
      //Check if block height is 0
      if (height === -1) {
        //Create the Genesis Block - The first block in the blockchain
        this.addBlock(
          new Block('First block in the chain - Genesis block')
        ).then(() => console.log('Genesis Block created!'))
      }
    })
  }

  // Add new block
  async addBlock(newBlock){
    //Get block height from levelDB
    newBlock.height = await parseInt(this.getBlockHeight()) + 1
    //Generate block timestamp
    newBlock.time = new Date().getTime().toString().slice(0, -3)
    //Check if the Block is not Genesis Block
    if (newBlock.height > 0) {
      //Get the block
      const prevBlock = await this.getBlock(newBlock.height)
      //Get previous block's hash
      newBlock.previousBlockHash = prevBlock.hash
      console.log('Previous Hash: ' + newBlock.previousBlockHash)
    }
    //Generate hash for the new block.
    newBlock.hash = SHA256(JSON.stringify(newBlock)).toString()
    console.log('New Hash: ' + newBlock.hash)
    //Save the block created to levelDB
    await levelDB.addDBBlock(newBlock.height, JSON.stringify(newBlock))
  }

Код levelDB для сохранения данных с использованием обещаний:

module.exports = {
    //Saving blocks to LevelDB
    addDBBlock: (key, value) => {
      return new Promise((resolve, reject) => {
        db.put(key, value, error => {
          if (error) reject(error)
          resolve('Added block #' + key)
        })
      })
    },

    //Getting blockchain height from levelDB
    getDBBlockHeight: () => {
      return new Promise((resolve, reject) => {
        let height = 0
        db.createReadStream()
          .on('data', data => {
            height++
          })
          .on('error', error => {
            reject(error)
          })
          .on('close', () => {
            resolve(height)
          })
      })
    },  

Пожалуйста, сообщите, если проблемы с неправильнымструктура обещаний Я ошибаюсь при вводе данных.

...