从Javascript中的嵌套函数返回一个值

时间:2016-02-28 04:09:23

标签: javascript firebase

我试图从方法中返回一个值。我在方法中有一个嵌套函数,它应该返回一个值。

但是,在调用traverseProjects()时,我无法让它返回title的值。

这是我的代码。

getTitle: function(userId, projectId) {
        u = new Firebase('<firebase.com>/users/' + userId + /projects/ + projectId);
        function traverseProjects() {
            u.once('value', function(snapshot) {
                if (snapshot.key() === projectId) {
                    var obj = snapshot.val();
                    var title = obj.details.title;
                }
                console.log(title);
                return title;
            });
        }

        var title = traverseProjects();
        console.log(title);
        return title;
    }

1 个答案:

答案 0 :(得分:1)

做这样的事情:

getTitle: function(userId, projectId, callback) {
    u = new Firebase('<firebase.com>/users/' + userId + /projects/ + projectId);
    function traverseProjects(callack) {
        u.once('value', function(snapshot) {
            if (snapshot.key() === projectId) {
                var obj = snapshot.val();
                var title = obj.details.title;
            }
            console.log(title);
            callback(title);
        });
    }

    traverseProjects(function(title) {
      console.log(title);
      callback(title);
    });
}

用以下方法调用该函数:

getTitle('uid', 'pid', function(title){
    console.log(title);
})

像@ felix-kling建议的那样,我们可以简单地消除内部功能:

getTitle: function(userId, projectId, callback) {
    u = new Firebase('<firebase.com>/users/' + userId + /projects/ + projectId);
    u.once('value', function(snapshot) {
        if (snapshot.key() === projectId) {
            var obj = snapshot.val();
            var title = obj.details.title;
        }
        console.log(title);
        callback(title);
    });
}