【问题标题】:How to retrieve value of a variable in class如何在类中检索变量的值
【发布时间】:2011-10-30 14:41:04
【问题描述】:

您好,我在从方法中检索值时遇到问题。我在 node.js 中使用 sequelize。

当我这样做时如何获得 placeTmp['id']:

server.js:

var Sequelize = require('sequelize');
var sequelize = new Sequelize(config.database, config.username, config.password);
var Place     = sequelize.import(__dirname + '/model/Place');
console.log(Place.getActualId()); // An ID but I'll retrieve undefined :(

Place.js:

module.exports = function(sequelize, DataTypes) {
var place = sequelize.define('Place', {
    name    : DataTypes.STRING,
    address : DataTypes.STRING,
    city    : DataTypes.STRING,
    zipcode : DataTypes.INTEGER,
    website : DataTypes.STRING,
    start   : DataTypes.DATE,
    end     : DataTypes.DATE,
    type    : DataTypes.STRING,
   actual  : DataTypes.BOOLEAN
},
{
    underscore     : true,
    timestamps     : false,
    freezeTableName: true,
    classMethods: {
        getActualId: function(){
             this.find({where: {actual: 1}}).on('success', function(placeTmp){
             return placeTmp['id'];
     })
   }
}
});

return place;
}

你能帮帮我吗?

非常感谢之前

【问题讨论】:

  • 不能从异步操作中返回值;这没有道理。相反,您必须构建代码以使用回调。这种情况与刚刚提出的 JavaScript 问题相同(在不同的上下文中)"The value of my function is undefined."

标签: javascript class node.js


【解决方案1】:

因为获取 ID 是异步操作你应该这样做:

    var Sequelize = require('sequelize');
    var sequelize = new Sequelize(config.database, config.username, config.password);
    var Place     = sequelize.import(__dirname + '/model/Place');
    Place.getActualId(function(id){ console.log(id); });


    module.exports = function(sequelize, DataTypes) {
    var place = sequelize.define('Place', {
        name    : DataTypes.STRING,
        address : DataTypes.STRING,
        city    : DataTypes.STRING,
        zipcode : DataTypes.INTEGER,
        website : DataTypes.STRING,
        start   : DataTypes.DATE,
        end     : DataTypes.DATE,
        type    : DataTypes.STRING,
       actual  : DataTypes.BOOLEAN
    },
    {
        underscore     : true,
        timestamps     : false,
        freezeTableName: true,
        classMethods: {
            getActualId: function(callback){
                 this.find({where: {actual: 1}}).on('success', function(placeTmp){
                 callback(placeTmp['id']);
         })
       }
    }
    });

    return place;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多