backbone.fetch使用“return”只返回undefined而不是特定值

时间:2014-06-23 02:24:11

标签: backbone.js

你好我是backbonejs的新手,

我创建了一个函数来验证会话,并在调用此函数时通过我的路由使用if和else语句

var validateSession = function(){
    var session = new sessionCollection();
    session.fetch( {
        success : function(){
            return true;
        },
        error : function(){
            CarRentalApp.trigger('admin:login');
            return false;
        }
    } );
};

问题是“返回”声明对我不起作用。它不是返回true或false,而是返回undefined。我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

您也可以使用$.Deferred()

var validateSession = function(){
    var defer = $.Deferred();
    var session = new sessionCollection();
    session.fetch( {
        success : function(){
            defer.resolve(true);
        },
        error : function(){
            defer.resolve(false);
        }
    });
    return defer.promise();
};

然后:

$.when(validateSession()).done(function(result){
});

答案 1 :(得分:1)

我认为这是一个javascript问题,而不是骨干。 Backbone.Collection.fetch方法是一种异步方法,这意味着如果你这样做:

validateSession();

该函数将调用session.fetch()然后立即返回,它不会等待fetch()方法完成它的工作。你没有在validateSession函数中有return语句,所以它只是返回你未定义的。并且当fetch()方法完成时,您不会收到任何通知。

如果你想获得session.fetch()的结果,我认为你最好在成功和错误两种情况下触发事件:

var validateSession = function(){
    var session = new sessionCollection();
    session.fetch( {
        success : function(){
            CarRentalApp.trigger('valid:true');
        },
        error : function(){
            CarRentalApp.trigger('valid:false');
        }
    } );
};

然后听取这两个事件并分别进行一些处理。

希望这可以提供帮助。