我是异步/等待功能的新手。我有一个获取数据库信息的函数,我想让函数setUpDb()
等到诺言完成后再返回。
const dbInfo = this.setUpDb();
console.log(dbInfo);
async setUpDb() {
const appLoc = path.join(homedir(), ".tsa"); // temp db info
const f: string = path.join(appLoc, "config.json");
await fs.ensureFile(f);
const temp = await fs.readJson(f);
console.log(temp);
return {
dbHost: temp.dbHost,
dbUser: temp.dbUser,
dbPass: temp.dbPass
};
}
我当前的输出是:Promise { <pending> }
,过了一会儿,它就是temp
中的所有信息。
我只需要获取返回值,直到有值返回为止。有可能吗?
谢谢!
答案 0 :(得分:2)
您正在记录异步功能完成之前的信息。只需等待承诺解决,然后再记录
let dbInfo;
this.setUpDb().then(result => {
dbInfo = result;
console.log(dbInfo);
});
答案 1 :(得分:1)
我认为哮喘建议是最好的方法,但我认为您也可以做到。
//const temp = await fs.readJson(f);
let temp;
await() => temp = fs.readJson(f);
(我可能是错的)
答案 2 :(得分:1)
您必须等待setUpDb
函数的返回
async setup() {
const dbInfo = await this.setUpDb();
console.log(dbInfo);
}
async setUpDb() {
const appLoc = path.join(homedir(), ".tsa"); // temp db info
const f: string = path.join(appLoc, "config.json");
await fs.ensureFile(f);
const temp = await fs.readJson(f);
console.log(temp);
return {
dbHost: temp.dbHost,
dbUser: temp.dbUser,
dbPass: temp.dbPass
};
}