【问题标题】:Node js not returning value of a function properly [duplicate]节点js没有正确返回函数的值[重复]
【发布时间】:2015-12-28 12:50:45
【问题描述】:

当用户注册时,他的个人资料必须从另一个网站获取一些值。

我编写了一个返回这些值的函数,但它不会像我想要的那样工作。

代码如下:

var user = new User(); // to create him in the database
user.userData.someVariable = myFunc(someID);

function myFunc(someID){
.......
  Users.findOne({'someVar': someID}, function(err, user){
    if(err)
      throw err;
    if(user)
      return user.userData.id; // it doesn't return it, but it has found it
      // I can even console.log it, and I see that it exists, but user.userData.someVariable wont be set to user.userData.id
    else if(!user) throw err;
  }   
}

有什么帮助吗?我还能做些什么来获得价值吗?谢谢!

【问题讨论】:

  • 我希望它返回到第二行(在我在这里编写的代码上),以便将 user.userData.someVariable 设置为函数返回的 id (myFunc())。当我看到我的数据库以查看它是否真的存在时,user.userData.someVariable 根本不存在。该函数也在第二行被调用(在我在这里写的代码上,再次)
  • 我的错我完全忽略了那部分。对不起。
  • if(user && user.userData && user.userData.id) 改用可能会有所帮助,但如果没有,则显示返回值所在的代码

标签: javascript node.js function return return-value


【解决方案1】:

您需要传递回调而不是仅仅返回值,当您请求该值时,请求可能尚未完成。示例:

var user = new User(); // to create him in the database

// Call myFunc and wait for it to finish.
myFunc(someID, function(err, userData){
  if (err) throw err;
  user.userData.someVariable = userData;
});

function myFunc(someID, callback){

  Users.findOne({'someVar': someID}, function(err, user){
    if(err)
      return callback(err);
    if(user)
      return callback(null, user.userData.id);
    else if(!user) return callback(new Error('User not found!'));
  }   

}

【讨论】:

  • 这个问题我们不需要另一个答案
  • 同意,我应该评论一下!
  • 好的,这似乎没有错误。但是其他变量会消失吗? (我的意思是在代码中)我仍然需要设置 user.userData.userName 和 user.userData.password。我在哪里放置它们(再次,在代码中!)?谢谢你帮助我!
  • 好吧,在回调中,你可以只传递整个 user 变量,而不是传递 user.userData.id ;)
  • @JuanStiza 我不能这样做,因为其他变量是在 html 上设置的,所以在数据库中没有什么可搜索的。它们必须在 myFunc(someID... 等之前或之后设置。不在里面!还有什么?
猜你喜欢
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 2019-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多