node.js - 如果我们从回调中返回 toJSON 中的对象,为什么它是 null ? (吃水线)

标签 node.js sails.js waterline

我有 TopPlayer 模型:

module.exports = {

  attributes: {
    league_id: 'number',
    playerid: 'number',
    playerimage: 'url',
    teamimage:'url',
    teamname:'string',
    season: 'string',
    player: 'string',
    assets: 'number',
    goals: 'number',


    toJSON: function() {
      var obj = this.toObject();
      Player.findOne({gs_id:obj.playerid}).done(function(err, player) {
        obj.playerImage = player.image;
        console(player.image);// everything is ok
        return obj; // but this is returning null
      });
    }
  }
};

和 toJSON 始终返回 null 对象。当我调试时,播放器已创建,但回调内的 obj 实例为空,我无法返回他:( 我该如何解决这样的问题?

最佳答案

在您的情况下,toJSON 不返回任何内容,因为您实际上没有从中返回任何内容。看我的评论:

toJSON: function() {
  var obj = this.toObject();
  Player.findOne({gs_id:obj.playerid}).done(function(err, player) {
    obj.playerImage = player.image;
    console(player.image);// everything is ok
    return obj; // but this is returning null
  });
  // You must return a value here:
  return ojb;
}

您不能以异步方式编写toJSON方法。它必须返回一个值。此方法适用于简单的任务,例如过滤输出。如果您想做复杂的事情,例如数据查询,请考虑在不同的地方进行。

要澄清为什么你所做的事情是不可能的,请参阅 SO 上的许多类似问题之一,例如:How to return value from an asynchronous callback function?

关于node.js - 如果我们从回调中返回 toJSON 中的对象,为什么它是 null ? (吃水线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23757909/

相关文章:

mysql - 尝试在 sails js 中发布 Recipe 帖子

node.js - sails.js sails.services 和 sails.models 不包含我的服务和方法

javascript - promise : execute after loop

node.js - Codeanywhere:node.js 的预览链接

node.js - Node JS - 如何检测用户语言

javascript - json 被转换为 BSON

javascript - 我们可以在 sails 中的 Create() 回调之后/之前更改属性值吗?

javascript - 以编程方式控制 Grunt.js

javascript - 正确检查javascript中的空值

node.js - sails Js : how do I save collections with particular fields to the mongo db via waterline