Firebase和Angular中的回调



我正在学习使用angular的Firebase教程,它开始于在控制器中制作child_added请求,但现在我们正在重构并将这些请求移动到服务中——正如我们应该的那样。

但是,服务中使用了一些我不熟悉的语法。以下是我的服务,它正在向firebase db发出child_added请求:
app.service(‘messageService’, function() {
    var messagesRef = new Firebase(FBURL);
    return {
        childAdded: function childAdded(callback) {
            messagesRef.on(‘child_added’, function(data) {
                callback.call(this, {
                    user: data.val().user,
                    text: data.val().text,
                    name: data.name()
                });
            });
        }   
    }
}

然后在控制器中我们像这样使用服务:

messageService.childAdded(function(addedChild) {
    $timeout(function() {
        $scope.messages.push(addedChild);
    });
});

首先,我对callback.call(this, ...在做什么感到困惑?其次,这条线如何与控制器中的push()方法联系在一起?

我将非常感谢任何解释。谢谢!

call()只是JavaScript标准库(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)中的一个函数。

代码:

callback.call(this, {
  user: data.val().user,
  text: data.val().text,
  name: data.name()
});

实际上相当于说:

callback({
  user: data.val().user,
  text: data.val().text,
  name: data.name()
});

function (addedChild) {...}是你的回调。

因此,addedChild在你的代码中最终只是:

{
  user: data.val().user,
  text: data.val().text,
  name: data.name()
}

其中data为添加的子节点的DataSnapshot, data.val()为其值,data.name()为其键。

使用call()与直接调用回调的唯一不同之处在于调用允许您指定调用者,它成为回调的this对象。

相关内容

  • 没有找到相关文章

最新更新