【问题标题】:How to get data using async and await in node js如何在节点js中使用异步和等待获取数据
【发布时间】:2020-05-20 07:53:13
【问题描述】:

我有两个产品和类别集合,并且我有两个集合都有数据产品(152)和类别(10)。因此,我尝试连接数据库以检索数据。首先,我使用 async-await 功能调用产品集合数据,然后调用类别集合数据。但它会获取第一类数据和下一个产品数据。如何解决这个问题任何人都可以给出答案。

product.js

async function product_data(collection) {
   let mongodb = await MongoDB.connect(collection)
   let result = await mongodb.findAll()
   return result
}

module.exports.product_data = product_data

category.js

async function category_data(collection) {
   let mongodb = await MongoDB.connect(collection)
   let result = await mongodb.findAll()
   return result
}
module.exports.category_data = category_data

app.js

const {product_data} = require("./product")
const {category_data} = require("./category")   

async function updatedb() {
    let product_data = await product_data("ecomm_product")
    console.log(product_data)
    let category_data = await category_data("ecomm_category")
    console.log(category_data)  
}

我得到了结果

打印product_data后的第一个打印category_data

预期结果

它在打印 category_data 之后的第一个打印 product_data

【问题讨论】:

  • 我想首先我会问为什么你需要它们以特定的顺序?尽管如此,本质上它们只是承诺,一旦承诺被“解决”,它就会返回结果。除非链接它们,否则您无法真正控制订单,因此一旦product_data 返回,然后运行category_data
  • 因为在我的情况下 product_data 被映射到 category_data 我只希望首先将所有产品插入数据库。
  • 你能粘贴你的输出吗?似乎没有问题。但怀疑 MongoDB 连接会导致问题。只是好奇 connect 方法期望 MongoDB URL,而不是集合名称。
  • 您的代码似乎认为它是 Python,因此您可能还想解决这个问题:按照惯例,函数和变量在 JS 中使用 lowerCamelCase(而不是 python 的 lower_snake_case),函数以它们的作用命名,并且变量名称为它们“在”什么。同样在minimal reproducible example 注意:没有理由将其显示为三个单独的代码块:这可以毫无问题地显示为单个块。

标签: node.js


【解决方案1】:

我根本无法重现这一点,即使产品需要比类别更长的时间来解决的明显延迟也是如此。将您的代码折叠到一个文件中,并使用适当的 JS 约定来命名和大小写:

function getProductData(collection) {
  return new Promise(resolve => {
      setTimeout(() => resolve('product'), 2000);
  });
}

function getCategoryData(collection) {
  return new Promise(resolve => {
      setTimeout(() => resolve('category'), 1000);
  });
}

async function updatedb() {
    let product_data = await getProductData("ecomm_product")
    console.log(product_data)
    let category_data = await getCategoryData("ecomm_category")
    console.log(category_data)
}

updatedb();

这只会产生以下输出,每次:

$node test.js
product
category

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 2021-09-27
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多