当前位置: 首页 > 知识库问答 >
问题:

node.js中的回调和数据库变量[duplicate]

戎志勇
2023-03-14
[Function: index]

node.js中是否有任何解决方案可以从数据库中获取变量并在后面的代码中重用它?

var index = function( callback ) {   
    var podcast = 0;  
    User.findOne({ sessionID: this.event.session.sessionId }, function(err, user) {
          if (err ||!user){

          }
          else {
             console.log(user);
             podcast = user.podcast;
          }
        });
    callback( podcast );
};

index();

var callback = function(data) {
    return data;
}

var iUseMyAnywhere = callback;

共有1个答案

有骏奇
2023-03-14

看起来我想在Node.js中做什么是不可能的

完全有可能。只是,您需要使用异步API,这使得它是向踝的。

node.js中是否有任何解决方案可以从数据库中获取变量并在后面的代码中重用它?

var myUserFromDb = User.find('john doe', function(err, res){...}); //this will fail 

因此,遗憾的是,您不能仅仅在uservar中获取用户并将其传递给另一个模块--假设是podcast模块--。

但是,假设您有一个'user.js'模块,它公开一个withuser方法,然后为用户aks数据库,然后在解析db调用时与用户一起调用一个提供的函数。

假设您有一个带有getPodcast方法的'podcast.js'文件/模块,它需要一个用户。

getpodcast不能只要求“user.js”作为用户。但是,它可以请求一个函数,该函数将以传递的用户作为参数运行:

user.js

function withUser(callback){
    User.find({_id: 1}, (err, user)=> {
        callback(user);
    })
}

podcast.js

function getPodcast(){

    withUser( function(user){
        //now we really have the user inside podcast.js, and we can work with it.
        //Sadly, that will surely involve more asynchronous api's, which is painful.
    })
}

user.js

function getUser(id){
    //let's say we return a promise that wraps the `User.find` database request
}

podcast.js

getUser(userId).then(user => getPodcast(user)).then(podcastResult => ...)

这不是看的更好。但是,当您使用promise API时,您可以开始使用async/await。

 async function getPodcast(userId){
      const user = await User.getUser(uesrId);
      const otherAsyncThing = await ...someAsyncApiCall;

      doAnythingWithUser(user); //this line won't execute until user is resolved, even if there aren't callbacks involved :-D
 }
 类似资料:
  • 问题内容: 如何从exec函数之外找到用户名? 问题答案: 您可以将exec函数传递给回调函数。当exec函数确定用户名时,您将使用用户名调用回调。 由于JavaScript的异步特性,您无法执行以下操作: 这是因为该行不会等到上面的函数完成。 回调说明:

  • 所以我有这个方法: 数据库返回null,并将设置为null。 什么是我可以100%避免NPE的万无一失的方法?我知道从这里可以看出,tocasting不是一个保证 更新:在代码中,NPE被抛出。。。这对我来说毫无意义。我预计NPE会被抛出

  • 问题内容: 我正在尝试在jquery的AJAX调用中使用变量,但是它不起作用。移动变量包含不同的值。请检查以下代码: 建议在数据中使用$ move变量的任何方法。 问题答案: 它应该是

  • 问题内容: 我是一个长期的PHP(CodeIgniter和WordPress)开发人员,直到最近才想学习其他几种语言。我已经着手通过node.js学习Ruby(在Rails和Sinatra上),Python(在Flask框架下)和Javascript。 我决定使用每种语言创建一个我能想到的最基本的应用程序,即URL扩展器。除了node.js和Javascript,我已经设法用每种语言创建了一个工作

  • 我被迫在getJSON回调函数中使用该函数之外的数据。看一看: 这就是我尝试的,但是失败了,$值仍然设置为0,尽管在回调中它肯定设置为实际值。我知道为什么它会失败,因为AJAX请求是异步发送的。问题是,正确的方法,做回调里面的一切,是不可能的。如你所见,我需要在raty(插件)设置中检索JSON对象。我只会使用$. ajax()并将其设置为同步,但留档将其标记为1.8不建议使用。我宁愿不引入一个我

  • 主要内容:阻塞代码实例,非阻塞代码实例Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。 例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js