【问题标题】:function returning nothing in mongodb query函数在 mongodb 查询中不返回任何内容
【发布时间】:2020-11-12 05:21:35
【问题描述】:

我没有捕获连接函数以在 getAllowedEmails 函数中返回,当我在 allowedEmails 中执行 console.log 时,它会正确返回电子邮件,但是当我分配给变量 emails 时,它返回空。我认为这是一个异步等待问题,但无法弄清楚。

static async getAllowedEmails() {
    
    var MongoClient = require("mongodb").MongoClient;
    
    //db url
    
    let emails = [];

    await MongoClient.connect(url, async function (err, client) {
      
      const db = client.db("data-admin");

      var myPromise = () => {
        return new Promise((resolve, reject) => {
          db.collection("users")
            .find({})
            .toArray(function (err, data) {
              err ? reject(err) : resolve(data);
            });
        });
      };
      var result = await myPromise();

      client.close();
      let allowedEmails = [];
      result.map((email) => allowedEmails.push(email.email));

      console.log(allowedEmails)

      emails = allowedEmails;
      
    });
    console.log(emails)
    
    return emails;

  }

【问题讨论】:

  • 它有效,谢谢,我认为我使用回调符号迷失了自己。使用完全异步等待对我来说更好,代码变得清晰易读。

标签: node.js mongodb async-await


【解决方案1】:

您的代码有几个问题,我已经修复了一些并对其进行了增强,下面给出的是基本代码,尝试对其进行测试,如果一切正常,然后根据需要对其进行增强:

const MongoClient = require("mongodb").MongoClient;

async function getAllowedEmails() {
    let client;
    try {
        const allowedEmails = [];
        client = await MongoClient.connect(url);
        const db = client.db("data-admin");
        const result = await db.collection("users").find({}).toArray();
        result.map((email) => allowedEmails.push(email.email));
        console.log(allowedEmails)
        client.close();
        return allowedEmails;
    } catch (error) {
        (client) && client.close();
        console.log(error)
        throw error;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2017-07-13
    • 2021-01-22
    • 1970-01-01
    相关资源
    最近更新 更多