如何构造代码以返回回调
How to structure my code to return a callback?
所以我已经在这个问题上呆了很长一段时间了。我在这里问了一个类似的问题:done()到底是如何工作的,我如何在done(()中循环执行?但我想我的问题有点改变了。
所以问题是,我加载了很多流,需要一段时间来处理它们。因此,为了弥补这一点,我想至少将已经处理过的流加载到我的网页上,同时继续处理推文流。
loadTweets: function(username) {
$.ajax({
url: '/api/1.0/tweetsForUsername.php?username=' + username
}).done(function (data) {
var json = jQuery.parseJSON(data);
var jsonTweets = json['tweets'];
$.Mustache.load('/mustaches.php', function() {
for (var i = 0; i < jsonTweets.length; i++) {
var tweet = jsonTweets[i];
var optional_id = '_user_tweets';
$('#all-user-tweets').mustache('tweets_tweet', { tweet: tweet, optional_id: optional_id });
configureTweetSentiment(tweet);
configureTweetView(tweet);
}
});
});
}};
}
这几乎就是我现在代码的结构。我想问题出在for循环上,因为在for循环完成之前什么都不会显示。所以我有两个问题。
- 如何在处理推文时将推文流显示在我的网站上
- 在执行此操作时,如何确保Mustache.load()只执行一次
问题是UI操作和JS操作都在同一个线程中运行。因此,要解决这个问题,您应该只使用setTimeout函数,以便JS操作在所有UI操作结束时排队。您还可以为时间间隔(大约4ms)传递一个参数,这样JS引擎较慢的浏览器也可以顺利执行。
...
var i = 0;
var timer = setInterval(function() {
var tweet = jsonTweets[i++];
var optional_id = '_user_tweets';
$('#all-user-tweets').mustache('tweets_tweet', {
tweet: tweet,
optional_id: optional_id
});
configureTweetSentiment(tweet);
configureTweetView(tweet);
if(i === jsonTweets.length){
clearInterval(timer);
}
}, 4); //Interval between loading tweets
...
注意
解决方案基于以下假设-
您正在使用
configureTweetSentiment
和configureTweetView
方法操作dom。理想情况下,上述解决方案不是最佳解决方案。相反,你应该先用javascript创建所有html元素,然后在最后将最后的html字符串附加到div中。你会看到性能的巨大变化(真的!)
你不想使用网络工作者,因为旧浏览器不支持他们。如果不是这样,并且您没有使用
configure
方法操作dom,那么web工作者就是进行数据密集型操作的方法。
相关文章:
- 函数表达式,返回回调函数
- 如何“;等待”;以便返回回调
- jQuery,动画和动画返回.回调函数错误?:S
- 节点.js AMQP 不返回回调
- 返回回调函数 Node.js 的数据
- 承诺不返回回调数组
- 使用 jsonp 和 php 返回回调
- 订阅子作用域上的事件,并在broadcastemit中返回回调
- 为什么angular返回回调函数内部的函数
- Node.js:为什么要在错误处理期间返回回调的结果
- 如何构造代码以返回回调
- 具有HTTP请求的Meteor方法不返回回调
- 我如何返回回调MySQL查询和推到一个数组在Node.js
- 如何从使用node-oracledb的查询返回回调
- 直接调用回调或返回回调
- 设置变量返回回调监听器
- 泛型池函数返回回调的结果
- 回调中的AWS返回回调
- 我应该返回回调还是直接运行它
- 节点HTTPS请求没有在Lambda中返回回调函数