MongoDB 查询:我无法获取回调范围之外的结果对象

卡拉尔

我正在使用连接到 MongoDB 的 express API,当我查询 DB 以获取结果时,我只能在回调范围内使用它们,甚至在使用 console.log 时我将结果的值分配给全局声明的变量。 log(),结果未定义

这是我的代码

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

const express = require('express');
const assert = require('assert');

const app = express();
const PORT = process.env.PORT||13000;



app.get('/',(req,res) => {

        let myIncomingData;

const url = 'mongodb://localhost:27017/';
        MongoClient.connect(url,{useNewUrlParser:true},(err,db)=>{
        assert.equal(err,null);
        db.db('my_posts').collection('posts').find().toArray((err,result) =>{
         assert.equal(err,null);
         console.log(result);       // here the result gets printed 
         myIncomingData = result;
        }); // db.collection
   db.close();



        }); // MongoClient.connect
        console.log(myIncomingData);  //  print undefined  why ??
}) // app.get


app.listen(PORT,()=>console.log('server is running ...'))
威利斯

node 是异步的,所以在你做的时候console.log, ,myIncomingData仍然是未定义的(你甚至可以按顺序看到这一点console.logs——首先它会从那一刻开始记录未定义的,console.log然后它会记录console.log回调中的)。如果你想看到它的实际效果,你可以尝试做一些类似的事情setTimeout(() => console.log(myIncomingData), 5 * 1000)——通过延迟 5 秒,你可以非常确定回调代码已经运行,如果你想用这个值做任何进一步的事情,你会需要在回调中完成(内联或调用另一个函数)

async/await或者Promises可以使这样的代码更易于阅读和推理。如果您想继续使用回调,则值得查看回调教程以确保您了解它们发生了什么。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MongoDB分页的范围查询

来自分类Dev

保存MongoDB查询的结果

来自分类Dev

MongoDB中的多范围查询

来自分类Dev

MongoDB每秒获取结果

来自分类Dev

MongoDB聚合查询结果的计数

来自分类Dev

mongodb日期范围查询优化

来自分类Dev

MongoDB对象字段和范围查询索引

来自分类Dev

如何在MongoDB中获取结果值范围

来自分类Dev

在MongoDB中限制查询结果

来自分类Dev

在连接回调之外访问MongoDB

来自分类Dev

如何从对象获取“任何” mongodb结果键

来自分类Dev

MongoDB查询对象数组

来自分类Dev

解析mongodb查询结果返回的对象

来自分类Dev

从MongoDB查询结果中删除重复的对象

来自分类Dev

MongoDB / MongoJS查询无结果

来自分类Dev

无法在Mongoose上使用MongoDB Cookbook“查询日期范围”

来自分类Dev

MongoDB中的多范围查询

来自分类Dev

无法查询从Mongodb返回的类似数组的对象

来自分类Dev

Mongodb异步获取结果

来自分类Dev

MongoDB从对象获取元素

来自分类Dev

MongoDB:从查询结果中排除对象字段等于false的对象

来自分类Dev

mongodb:无法从$ project和$ eq获取结果

来自分类Dev

mongodb:查询日期范围

来自分类Dev

如何合并mongodb查询结果?

来自分类Dev

来自 MongoDB 查询的订单结果

来自分类Dev

查询 MongoDB

来自分类Dev

等待MongoDB查询结果

来自分类Dev

mongodb聚合查询结果

来自分类Dev

通过查询获取mongodb中的对象值