gpt4 book ai didi

javascript - 这是不好的回调做法吗?

转载 作者:行者123 更新时间:2023-12-01 02:14:11 25 4
gpt4 key购买 nike

我对 JavaScript 比较陌生,经常发现自己在辅助对象中编写方法,这些方法接受回调作为参数,例如

var utilities = {
getTweets: function (user, maxTweets, callBack) {
var obj = $(this);
$.getJSON('http://api.twitter.com/1/statuses/user_timeline.json?callback=?&screen_name=' + user + "&count=" + maxTweets, function (data) {
callBack(data);
});
};

然后我这样调用它:

 utilities.getTweets("TESTUSER", 4, function (tweets) {
.....
});

鉴于我使用 setInterval 调用上面的代码,这可能会随着时间的推移而泄漏/是否有更好的方法来编写它?

最佳答案

除了不需要创建额外的闭包之外,您所做的大部分都很好。传递一个闭包,如下所示:

function (data) {
callBack(data);
}

与直接在参数列表中传递callBack效果相同。

但是,如果您可以保证使用 jQuery 1.5 或更高版本运行,那么更好的方法是让 getTweets() 返回 JQXHR 对象,然后您可以在客户端中使用“延迟”方法代码:

var utilities = {
getTweets: function (user, maxTweets) {
var uri = 'http://api.twitter.com/1/statuses/user_timeline.json?callback=?';
var data = {
screen_name: user,
count: maxTweets
};
return $.getJSON(uri, data);
});
};

然后在客户端代码中:

utilities.getTweets(user, maxTweets).done( /* your callback here */ );

这样就可以将回调与实现完全解耦。事实上,您可以注册多个回调和错误处理程序,而无需触及实用程序的实现。

注意:使用上面的数据映射还可以保护您的代码免受参数注入(inject)。

关于javascript - 这是不好的回调做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688310/

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