微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

控制台语句不等待javascript中的函数返回

如何解决控制台语句不等待javascript中的函数返回

我正在尝试将变量x初始化为showData函数返回的值。这是我的代码

app.post("/view/show",(req,res) => {
    let x = showData(req.body.custmerName);
    console.log(x);
}

这是showData函数

const showData = (custName) => {
    const customer = mongoose.model(custName,collectionSchema,custName);
    customer.find( (error,data) => {
        if (error){
            console.log(error);
        }else{
            return data;  
        }
    });
}

但是,控制台显示undefined。如果将console.log(data)添加showData函数中,可以看到我能够从数据库中成功获取数据。

我知道console.log(x)并不等待showData()的执行,这是由于JavaScript的sync属性。如何从函数获取值并将其记录到控制台,而不是获取undefined

解决方法

在处理异步功能时,您可以使用async / await或callback。

app.post("/view/show",(req,res) => {
  showData(req.body.custmerName,(err,res) => {
    const x = res;
    console.log(x);
  });
});

const showData = (custName,callback) => {
  const customer = mongoose.model(custName,collectionSchema,custName);
  customer.find(callback);
}

,

我以前实际上并没有使用过Mongoose,但是从文档来看,似乎没有一个只带有回调函数的find函数版本。

还尝试传递查询对象(在您的情况下,空对象就足够了):

customer.find({},(error,data) => {
    if (error) {
        console.log(error);
    } else {
        return data;  
    }
});

从文档中

// find all documents
await MyModel.find({});

// find all documents named john and at least 18
await MyModel.find({ name: 'john',age: { $gte: 18 } }).exec();

// executes,passing results to callback
MyModel.find({ name: 'john',age: { $gte: 18 }},function (err,docs) {});

// executes,name LIKE john and only selecting the "name" and "friends" fields
await MyModel.find({ name: /john/i },'name friends').exec();

// passing options
await MyModel.find({ name: /john/i },null,{ skip: 10 }).exec();
,

您需要一个异步函数来执行此操作。请执行以下操作:

app.post("/view/show",async(req,res) => {
    let x = await showData(req.body.custmerName);
    console.log(x);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。