如何在节点js中使用异步获取和等待数据

时间:2019-08-16 12:26:46

标签: node.js

我有两个产品和类别的集合,两个集合中都有数据产品(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)  
}  

我得到了结果

Its first print category_data after print product_data

例外结果

Its first print product_data after print category_data

1 个答案:

答案 0 :(得分:0)

即使有明显的延迟(产品的解析时间比类别的解析时间更长),我也无法重现。将您的代码折叠到一个文件中,并使用正确的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