Firebase中的Node.js值无法及时更新数组以进行函数调用(即使使用Async Await)

张敏

我确定这个问题是由于我缺乏异步/等待知识或一般的最佳实践。但是,我无法弄清楚自己在做什么。我想从Firestore数据库中提取一个值,将其包含在“全局变量”数组中,然后在其他模块中需要时调用它。但是,当我检查test函数中提取的数组时,它总是返回一个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
穆罕默德·亚瑟·艾哈迈迪

我在您的variables.js中看到了一个问题,希望这些更改可以解决问题,请在使用await之前 db.getLovePizza()

使用try/catch时使用async/await

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
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 Node js Await/Async 函数

JS,映射数组时使用Axios中的Async Await函数

Node.js中的async / await替换

在 firebase 云函数中使用 async/await

Node.js:使用sinon和async / await进行测试

与Node js async / await相比,了解Python async / await

如何使用Node JS中的async和await函数提取数据?

使用Babel在Node 6中使用async / await

node js async & await 函数 - 强制函数完成?

如何在 javascript 前端使用 async await 从 async await node.js 后端接收数据

在 svelte (#await) 中对 promise 使用 async await 不会返回在稍后的函数调用中格式化的所需数据

Babel 5.8.38 忽略 Node.js 中的 await

node.js:使用 await 消费承诺

在node.js中使用async / await返回对象

Node.js使用async / await读取文件

Node.js 在使用变量之前尝试使用 async/await 从 mysql select 中获取数据

使用Async Await中的Promise数据

Firebase Async Await样式的云功能

尽管 async/await,为什么 Firebase 查询 []?

即使等待位于 Node.js 中的异步函数中,如何修复“await 仅在异步函数中有效”?

如何使用async / await在node.js中异步创建ReadStream

在 Node.js 中,使用 async / await 处理错误的正确方法是什么?

如何在Node JS中的readline.on函数下使用await函数

在 Redux 的 Action 中,使用回调调用函数(使用 async/await 和 React-Native-Contacts)

异步使用async和await更新Winforms中的TreeView

如何在 Node.js 中使用“async/await”和“promises”进行同步执行?

使用Typescript中的数组迭代来简化async-await

Node.js,将async / await与readline.on函数一起使用

node.js - for .. await - 执行结束检测