2011-10-30 24 views
0

こんにちは私はメソッドから値を取得するのに問題があります。私は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; 
} 

はあなたが私を助けることができるの?

+2

を。意味がない。代わりに、コールバックを使用するようにコードを構造化する必要があります。状況は、ちょうど尋ねられたJavaScriptの質問(「私の関数の値は定義されていません)と同じです(別のコンテキストで)」(http://stackoverflow.com/questions/7945502/the-value-of- my-function-is-undefined) – Pointy

答えて

2

Bacause前

多くのおかげで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; 
    } 
+0

ありがとう@Tereska! – prcaen

関連する問題