在命令行中,这有效:
let blockchain = new Blockchain();
var bla;
blockchain.getBlockHeightPromise().then(i => bla = i);
// bla现在具有正确的值
在命令行中,此操作无效:
let blockchain = new Blockchain();
blockchain.addBlock(someBlock)
//控制台日志表明bla未定义
更新:为什么从命令行运行的结果与从类内部调用函数的结果不同?
//我的代码(缩写)
class Blockchain {
constructor() {
}
// Add new block
async addBlock(newBlock) {
var bla;
this.getBlockHeightPromise().then(i => bla = i);
console.log('bla: ' + bla);}
//Note addBlock needs to async because await db.createReadStream follows
getBlockHeightPromise() {
return new Promise(function (resolve, reject) {
let i = 0;
db.createReadStream()
.on('data', function () {
i++;
})
.on('error', function () {
reject("Could not retrieve chain length");
})
.on('close', function () {
resolve(i);
});
})
}
}
答案 0 :(得分:0)
在getBlogHeightPromise
的承诺完成之前执行控制台语句。
使用await
等待异步方法getBlogHeightPromise
解决:
// Add new block
async addBlock(newBlock) {
var bla = await this.getBlockHeightPromise();
console.log('bla: ' + bla);
}