我正在使用指令从调用Twitter API的服务返回返回推文。但在我将推文附加到范围之前,我想运行一些函数来根据我的喜好格式化数据。这些包括重新格式化日期,使用实体将文本处理为HTML,获得情绪等等。
/* Lazy loading */
element.find('.scroll').scroll(function() {
if ($(this)[0].scrollHeight - $(this).scrollTop() == $(this).outerHeight()) {
loadTweets(attrs.query,scope.maxId);
}
});
/* Load tweets function */
function loadTweets(query, maxId, sinceId) {
/* Get tweets from service that calls API */
gettweets(query, maxId, sinceId).then(function(tweets) {
/* Set Max ID and Since ID for Paging */
scope.maxId = tweets[tweets.length-1].id;
scope.sinceId = tweets[0].id;
/* Loop through response */
for (var i in tweets) {
/* Return reply meta if reply */
if (tweets[i].in_reply_to_status_id_str) {
(function(j) {
gettweet(tweets[i].in_reply_to_status_id_str).then(function(tweet) {
tweets[j].reply = tweet;
});
})(i);
}
/* Return parsed date for moment filter */
tweets[i].created_at_parsed = new Date(Date.parse(tweets[i].created_at));
/* Return tweet html with entities */
tweets[i].text_linkified = linkify(tweets[i]);
/* Return sentiment from Mashape API */
(function(j) {
getsentiment(tweets[i].text).then(function(response) {
tweets[j].sentiment = response;
});
})(i);
/* Push Tweets into scope */
scope.tweets.push(tweets[i]);
}
});
}
这种“几乎”有效,除非我在分页数据时,有时max_id没有得到更新,我最终得到了重复的推文。
如何更好地格式化以确保我的max_id仅在所有推文成功返回时更新,并且新推文在max_id为最新版之前不会加载?