如何从对象构造函数执行回调
How can I perform a callback from object constructor?
我有一个看起来像这样的对象:
var users = function(url){
this.users = []
console.time("api");
d3.json(url, function(data){
console.timeEnd("api");
this.users = data.data
})
}
它是这样设置的:
var liveUsers = new users(apiPoint)
d3.json是一个异步的API调用。我希望在回调完成后执行回调,最好是追回,我该怎么做?
您所需要的只是实现一个回调系统。这里有一个简单的方法:
var users = function(url){
var self = this;
this.users = []
console.time("api");
d3.json(url, function(data){
console.timeEnd("api");
self.users = data.data
self.cb && self.cb();
})
this.complete = function (fn) {
this.cb = fn;
};
}
var liveUsers = new users(apiEndpoint).complete(function (){
console.log(this.users);
});
对我来说仍然有点过于复杂,为什么需要它来链接? 为什么users
需要成为构造函数? 为什么users
甚至存在而不是简单地使用 d3.json
,它已经具有您在问题中寻找的所有功能开箱即用?
通常,在函数后面抽象请求的目的是避免需要指定 api 端点,以便如果您需要更改端点,您可以在一个地方完成所有操作。在这种情况下,您必须在每个请求中指定它,使函数的名称有点...毫无意义,因为它可用于从任何端点请求。
如果你想链接,只需return this
!
var users = function(url){
this.users = []
console.time("api");
d3.json(url, function(data){
console.timeEnd("api");
this.users = data.data
})
return this;
};
users.prototype.somethingElse = function(){
console.log(this.users);
return this;
};
var liveUsers = new users(apiPoint).somethingElse();
return this
的使用使链保持运行,您可以通过添加prototype
方法向类添加其他函数。使用该prototype
功能保留this
,但是如果您想使用与类无关的另一个函数并且仍然使用相同的this
,那么您需要更棘手一点:
var users = function(url){
this.users = []
console.time("api");
d3.json(url, function(data){
console.timeEnd("api");
this.users = data.data
})
return this;
},
somethingElse = function(){
console.log(this.users);
return this;
};
var liveUsers = new users(apiPoint);
// bunch of other codey stuffs
somethingElse.call(liveUsers);
通过使用.call()
应用 liveUsers
作为第一个参数,它会覆盖 somethingElse
函数最初具有的任何this
,并为其提供您想要的上下文(使 this
=== liveUsers
)。
希望这有帮助!
相关文章:
- 如何在`window.open`之后执行回调
- 带有Spring的$.getJSON未执行回调
- TypeError:执行回调时,回调不是函数
- Google API 的客户端库不会执行回调
- 调用消费方法后,如何在分配回调时执行回调
- 仅在堆栈中的最后一个执行回调
- 在组合框筛选后执行回调网格视图
- 在循环完成 nodejs 请求之前执行回调
- 通过AjaxForm提交图像并执行回调
- 无法在模块中执行回调,使用 Node-Cron导出对象
- 使用递归函数按顺序执行多个 ajax 请求,并在所有请求完成后执行回调函数
- 如何从对象构造函数执行回调
- 在 modernizr/yepnope 加载完所有文件后执行回调
- 在节点中执行回调
- Javascript 数组映射“出现”以对缺少的元素执行回调
- 如何在调用它的函数结束时执行回调
- 对多个元素执行回调函数
- JavaScript原生Promise对两个结果执行回调
- jquery中未执行回调函数
- 如何在循环中的所有AJAX请求完成后执行回调