#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
метод. И в вашей текущей реализации он по-прежнему выполняет свои вычисления синхронно.