我正在编写模块化JavaScript,我有一个完成大量处理的功能,即。绘制2幅画布,更新大量变量并存储对象引用。现在我想执行另一个使用上面更新的变量的函数。
这样的事情:
如果我在代码中注入setTimeout
10秒钟,一切正常,但没有它,上面的第二条指令找不到更新的变量,因此失败。
有什么方法可以解决这个问题吗?意思是,我想在设置了一些必需的变量后才执行第二条指令。我说同步执行。
注意:我不能在这里(或任何地方)发布任何代码,因为我的工作场所不允许这样做!
答案 0 :(得分:2)
对于这样的情况,我建议使用jQuery and custom events。只需在第一个函数更新完画布后发布一个事件。第二个函数(以及其他任何函数)可以监听这些事件并做任何他们想做的事情。
临:
缺点:
答案 1 :(得分:1)
您可以使用getter和setter来监视给定条件 在setter中,您可以进行一些计算,检查是否满足某些条件 并在必要时进行更新。
只是为了给你一个想法:
// updateFunc is the function called whenever a property changes
// and all conditions are met for an update.
// newProp1,2,3 are the new values for prop1,2,3
function MyStorageClass(updateFunc, newProp1, newProp2, newProp3 ) {
this.updateFunc = updateFunc;
this.prop1 = newProp1 ;
this.prop2 = newProp2 ;
this.prop3 = newProp3 ;
}
var MSCProto = MyStorageClass.prototype;
// update is needed if all properties are >0
MSCProto.checkUpdateRequired = function() {
return ( ( this.prop1 > 0 ) && (this.prop2 > 0) && (this.prop3 > 0) )
}
Object.defineProperty(MSCProto, 'prop1', {
get : function() { retrurn this._prop1},
set : function(x) { this._prop1 = x;
// and some other computations if need be
if (this.checkUpdateRequired()) this.updateFunc(); } };
Object.defineProperty(MSCProto, 'prop2', {
get : function() { retrurn this._prop2},
set : function(x) { this._prop2 = x;
// and some other computations if need be
if (this.checkUpdateRequired()) this.updateFunc(); } };
Object.defineProperty(MSCProto, 'prop3', {
get : function() { retrurn this._prop3},
set : function(x) { this._prop3 = x;
// and some other computations if need be
if (this.checkUpdateRequired()) this.updateFunc(); } };