Доступ к данным объекта внутри обещания

#javascript #promise #es6-promise

Вопрос:

Поэтому у меня есть метод getBlockByHeight, который заключается в следующем.

 getBlockByHeight(height) {
    let self = this;
    return new Promise((resolve, reject) => {
        try{
            let block = self.chain.filter(p => p.height === height)[0];
            if(block){
                resolve(block);
            } else {
                resolve(null);
            }
        } catch (err) {
        reject(new Error(err));
    }
    });
}
 

Затем я хочу проверить свои блоки другим методом и пытаюсь сделать следующее.

 let previousBlock = self.getBlockByHeight(block.height -1);
 

Эта строка возвращает обещание с моим объектом блока в нем правильно. Если я консолю.log предыдущий блок, он печатается следующим образом.

 Promise {
  Block {
    hash: '5535a9bf09a3667a533df8f8a90a6ae8e8dfe1ca9f3d5305df5a1d593d2afcf6',
    height: 1,
    body: 'longHexString',
    time: '1633881202',
    previousBlockHash: '1f018de4cb50fe2fc57b43c1a4972fde53d7e4ab9ca5809784d49e5a57497312'
  }
}
 

Мой вопрос в том, как мне получить доступ к хэшу в этом предыдущем объекте блока.
если я попытаюсь

 let preBlockHash = previousBlock.hash
 

Я становлюсь неопределенным. Я не совсем понимаю, почему это происходит, поэтому буду признателен за любую помощь, спасибо.

Комментарии:

1. Я не вижу никаких причин getBlockByHeight возвращать обещание, почему бы вам просто не вернуть block его ?

2. @NirAlfasi спасибо, но, к сожалению, другие части моего проекта должны быть асинхронными

3. согласитесь с @NirAlfasi, я думаю, что вам вообще не нужно использовать обещание. поскольку ваша функция асинхронна, почему бы вам не поставить ожидание let previousBlock = self.getBlockByHeight(block.height -1); ?

4. @DarraghCahill Я не вижу, как это необходимо для достижения чего-либо. Не могли бы вы уточнить?

5. @DarraghCahill » необходимость того, чтобы другие части моего проекта были асинхронными » — это никоим образом не должно влиять на ваш getBlockByHeight метод. И в вашей текущей реализации он по-прежнему выполняет свои вычисления синхронно.