如何获取异步函数以返回值而不是诺言?

时间:2019-07-18 22:39:22

标签: node.js typescript async-await

我是异步/等待功能的新手。我有一个获取数据库信息的函数,我想让函数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中的所有信息。

我只需要获取返回值,直到有值返回为止。有可能吗?

谢谢!

3 个答案:

答案 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
    };
}