gpt4 book ai didi

javascript - 如何在全局变量中的 Mongoose 中设置检索回调

转载 作者:可可西里 更新时间:2023-11-01 09:21:38 27 4
gpt4 key购买 nike

我想在全局变量中设置 db,但是当我从 findOne 函数中获取控制台 name 时显示未定义,我该怎么办做什么?

var name;

schema.findone({name : 'Bob'} , function(er , db){
name = db;
console.log(db);
});

console.log(name);

谢谢。

最佳答案

关于异步的 super 经典初学者错误:)

发生了什么:

var name; // FIRST you declare the name variable

schema.findone({name : 'Bob'} , function(er , db){ // SECOND you launch a request to the DB
name = db; // FOURTH name is populated.
console.log(db);
});

console.log(name); // !! THIRD !! you log name - it's empty

你应该做什么:

schema.findone({name : 'Bob'} , function(er , db){
doSomethingElse(db);
});

function doSomethingElse(name){
console.log(name); // It's defined.
}

你甚至不应该声明一个全局变量,因为这是一种不好的做法。一旦数据可用,就将其传递给另一个函数并对其进行处理。所以你不会污染你的全局范围。

编辑:既然出于某种原因你绝对想要一个全局变量,那么就这样做:

var name;

schema.findone({name : 'Bob'} , function(er , db){
name = db;
console.log(name); // works fine
doSomethingElse();
});

console.log(name); // name is empty here, because the DB request is still in progress at this stage

function doSomethingElse(){
console.log(name); // Tadaaaa! It's a global variable and is defined!
}

关于javascript - 如何在全局变量中的 Mongoose 中设置检索回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30636547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com