来自Firebase的Node.js值没有及时更新数组以进行函数调用(即使使用Async Await)



我确信这个问题是由于我缺乏异步/等待知识或一般最佳实践。然而,我不明白我做错了什么。我想从我的firestore数据库中提取一个值,将其包含在一个"数组中;全局变量";然后在其他模块中需要时调用它。然而,当我检查在测试函数中拉入的数组时,它总是返回一个promise。下面的代码是我最后尝试的一个例子。

index.js

const vars = require('./variables');
test();
async function test() {
console.log('Expect database value', await vars.global()['lovePizza']);
}

variables.js(这是有效的,数组更新(

const db = require('./database');
Let globalVars = {
lovePiza : '',
}
const variables = {
async global() {
globalVars['lovePizza'] = (globalVars['lovePizza'] === '') ? db.getLovePizza() : globalVars['lovePizza'];
return globalVars;
}
}
module.exports = variables;

database.js(这是有效的,从数据库中提取值(

const database = {
async getLovePizza() {
const usersRef = db.collection('accounts').doc('user1');
const doc = await usersRef.get();
if (!doc.exists) {
console.log('No such document!');
} else {
return doc.data()['lovePizza'];
}
}
}
module.exports = database;

终端响应:

Expect database value undefined

我在您的variable.js中看到了一个问题,我希望通过这些更改来解决这个问题,在db.getLovePizza()之前使用wait

使用async/await时使用try/catch

const db = require('./database');
Let globalVars = {
lovePiza : '',
}
async global() {
if(globalVars['lovePizza'] === ''){
try {
let result = await db.getLovePizza()//use await 
console.log(result);
globalVars['lovePizza'] = result
} catch (error) {
console.log(error)
//do somthing for error handlig like throw 
}
}
else{
globalVars['lovePizza'] = globalVars['lovePizza'] //I think there is no need for this
}
return globalVars;
}

index.js

test() {
let result = await vars.global()
console.log('Expect database value', result);// added to question
console.log('Expect database value', result['lovePizza']);// added to question
}

最新更新