gpt4 book ai didi

javascript - 加载最后 3 个和每个新子项

转载 作者:行者123 更新时间:2023-11-28 06:41:27 26 4
gpt4 key购买 nike

获取最后 3 条消息并将所有新消息附加/推送到数组中的最佳方法是什么?下面这样可以吗?如果我想使用 $firebaseArray 该怎么办?

var messages = [];
ref.child('messages').limitToLast(3).on('child_added', function(snap){
messages.push(snap.val());
});

var tempMessages = $firebaseArray(ref.child('messages').limitToLast(3));
messages.$loaded(function(data){
messages = data;
})

最佳答案

您 secret 想要的是范围查询

您想从最后三个开始并继续听。您可以使用 .start() 函数创建范围查询。一旦您知道从哪里开始范围,您就可以从最后 3 条消息开始,然后获取之后的每一条消息。

Here's a JSBin demo of the last three messages, plus any newly added messages .

问题是你必须首先知道倒数第三个键是什么。

为此,我们将对最后三个进行初始查询,获取倒数第三个键,然后运行范围查询。最好使用 .once 函数来完成此操作,因为我们只关心一次获取最后三项。

function LimitMessagesArray(Ref, $q) {
// return a function so we can alter the limit amount
return function LimitMessagesArray(lastLimit) {
var limitQuery = Ref.child('messages').limitToLast(lastLimit);
// Since it's a one time read we'll use a promise
var deferred = $q.defer();
// Reading only once is necessary
limitQuery.once('value', function(snap) {
var newMessages = [];
// iterate through the snapshot and keep the key around
snap.forEach(function(childSnap) {
var newMessage = childSnap.val();
newMessage.$key = childSnap.key();
newMessages.push(newMessage);
});
// resolve the last 'N' messages
deferred.resolve(newMessages);
});
return deferred.promise;
};
}

现在我们在 Promise-fulfilled 数组中拥有最后“N”条消息。我们想要获取数组的第一个键并使用它来启动范围查询。为了使这更容易,我们将创建一个工厂一系列消息。

function StartAtMessagesArray(Ref, $firebaseArray) {
return function StartAtMessagesArray(startingKey) {
var rangeQuery = Ref.child('messages').orderByKey().startAt(startingKey);
return $firebaseArray(rangeQuery);
};
}

一旦我们有了这两个部分,我们就可以将它们一起使用来收听最后三个消息以及所有新添加的消息。

function MyController($scope, limitMessages, startAtMessages, Ref) {
var lastThreeMessages = limitMessages(3);
// When the last three messages load get the first key
lastThreeMessages.then(function(data) {
var startingKey = data[0].$key;
// Create the sync array of messages from the starting key
$scope.messages = startAtMessages(startingKey);
});
}

关于javascript - 加载最后 3 个和每个新子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com