我正在构建一个插件,它以 JSON 格式获取一堆图像的信息,然后在某个对话框中显示它们以供选择。不幸的是,我的第一个直觉很清楚地导致了竞争条件:
var ImageDialog = function () {};
ImageDialog.prototype.items = [];
ImageDialog.prototype.fetch_images() {
var parse_images = function(data) {
// Magically parse these suckers.
data = awesome_function(data);
this.items = data;
};
magicalxhrclass.xhr.send({"url": 'someurl', "success": parse_images, "success_scope": this});
}
ImageDialog.prototype.render = function () {
this.fetch_images();
// XHR may or may not have finished yet...
this.display_images();
this.do_other_stuff();
};
var monkey = new ImageDialog();
monkey.render();
在我的脑海中,我想我可以通过更改parse_images
回调以包含其余的渲染步骤来解决这个问题。但是,这看起来不太正确。为什么该fetch_images
方法会调用一堆关于显示图像的东西?
所以:我应该在这里做什么?
我很确定 deferreds 会有所帮助,但可惜:我需要在没有任何外部库的情况下编写它。:(
对其他代码气味的评论也会很好!