保留SailsJs服务属性值

时间:2016-04-04 11:46:54

标签: javascript sails.js

我有以下服务:

SomeService.js

module.exports = {

    property:null,

    foo:function(){

       User.destroy({user_email:user.user_email}).exec(function(error,users){   
           this.property='somevalue'
       });

    }

}

当我像下面这样调用此服务时,它不会保留property变量的值。

SomeService.foo();
console.log(SomeService.property) //returns null

如何使用Sails服务保留property值?我如何像课一样使用它?也许它比Sails更像是一个JavaScript问题。我知道该对象与我使用它的方式不一样,但是有没有办法让我可以使用同一个对象进行服务?

更新:我已更新foo,我认为此案例中的this是指destroy构造,而不是服务。

1 个答案:

答案 0 :(得分:0)

  

从函数null开始,你很明显得到foo   正在调用异步方法

foo:function(){
    //the below functions is asynchronous so it is being pushed to event queue.
    //and setting this.property='someValue' becomes asynchronous.
    User.destroy({user_email:user.user_email}).exec(function(error,users){
        this.property='somevalue'
    });
};

所以在打电话时:

SomeService.foo();//this is asynchronous so does not block next executions.
console.log(SomeService.property)//this is not blocked by above call.

如果您想测试究竟发生了什么。请运行以下内容。

module.exports = {
    property:null,
    foo:function(){

        User.destroy({user_email:user.user_email}).exec(function(error,users){
            SomeService.property='somevalue';
            console.log("Am i executed first???? Oh no I am the last among them");
        });
    }
};

而且这个:

SomeService.foo();
console.log(SomeService.property);
for(var i=2;i<10;i++)
    console.log("I am called at number:",i);

所以我想你得到了它发生的原因。