Node.js 如何在NodeJS中使用async和Wait获取数据

Node.js 如何在NodeJS中使用async和Wait获取数据,node.js,Node.js,我有两个产品和类别集合,两个集合都有数据产品(152),类别(10)。因此,我尝试连接数据库来检索数据。首先我调用产品集合数据,然后使用异步等待功能调用类别集合数据。但它会得到第一类数据和下一类产品数据。如何解决这个问题任何人都可以给出答案 product.js 异步函数产品数据(采集){ 让mongodb=等待mongodb.connect(集合) 让result=wait mongodb.findAll() 返回结果 } module.exports.product_data=产品_数据

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

product.js

异步函数产品数据(采集){ 让mongodb=等待mongodb.connect(集合) 让result=wait mongodb.findAll() 返回结果 } module.exports.product_data=产品_数据 category.js

异步函数类别\u数据(采集){
让mongodb=等待mongodb.connect(集合)
让result=wait mongodb.findAll()
返回结果
}
module.exports.category\u数据=category\u数据
app.js

const{product_data}=require(“./product”)
常量{category_data}=require(“./category”)
异步函数updatedb(){
让产品数据=等待产品数据(“ecomm产品”)
console.log(产品数据)
让类别数据=等待类别数据(“ecomm类别”)
console.log(类别_数据)
}
我得到了结果

打印产品数据后的第一个打印类别数据

预期结果

它在打印类别数据之后第一次打印产品数据


我根本无法复制这一点,即使是在明确延迟的情况下,产品比类别需要更长的时间来解决。将代码折叠为单个文件,并使用适当的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

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