Javascript 如何防止在需要等待加载的对象中重复代码?

Javascript 如何防止在需要等待加载的对象中重复代码?,javascript,ajax,structure,Javascript,Ajax,Structure,如果我错了,请纠正我,但每当我在程序中看到冗余的代码块时,我总是认为有更好的方法来思考/设计它 举个断章取义的例子: const ob = new SomeAjaxObject(); ob.on('load', () => { doSomeThing(ob); //ob needs to be loaded to call this }) 问题是,如果在绑定load事件时ob已经加载,doSomething将永远不会触发 因此,我的解决方案如下: const ob = new S

如果我错了,请纠正我,但每当我在程序中看到冗余的代码块时,我总是认为有更好的方法来思考/设计它

举个断章取义的例子:

const ob = new SomeAjaxObject();
ob.on('load', () => {
    doSomeThing(ob); //ob needs to be loaded to call this
})
问题是,如果在绑定
load
事件时
ob
已经加载,
doSomething
将永远不会触发

因此,我的解决方案如下:

const ob = new SomeAjaxObject();
if(!ob.loaded){ //This property is synchronous
    ob.on('load', () => {
        doSomething(ob);
    })
}else{
    doSomething(ob);
}
有没有一种方法可以在没有冗余/重复代码的情况下实现上述功能


考虑到我无法控制
SomeAjaxObject
soure code

,我不能肯定地说,因为我不知道SomeAjaxObject做什么,但我建议使用您自己的自定义类扩展类,并尝试重写onload方法

class CustomAjaxObject extends SomeAjaxObject {
    constructor() {
        super()
    }

    onload() {
        doSomething()
    }
}
使用此方法可以重写父方法,当然我不能说
SomeAjaxObject
是否在内部使用方法
onload
或仅
on('load')
。最好自己试试


如果
SomeAjaxObject
在内部调用
onload
方法,您只需调用您的自定义类
new CustomAjaxObject()

,我不能肯定地说,因为我不知道SomeAjaxObject做什么,但我建议使用您自己的自定义类扩展类,并尝试重写onload方法

class CustomAjaxObject extends SomeAjaxObject {
    constructor() {
        super()
    }

    onload() {
        doSomething()
    }
}
使用此方法可以重写父方法,当然我不能说
SomeAjaxObject
是否在内部使用方法
onload
或仅
on('load')
。最好自己试试


如果
SomeAjaxObject
在内部调用
onload
方法,您只需调用自定义类
new CustomAjaxObject()

就可以轻松地将其放入函数中,然后在每次需要类似的东西时调用该函数。是的,但这只是隐藏了问题,我的问题主要是教育性的,我知道变化很小。等待和承诺是你想要的吗?你可以很容易地把它放到一个函数中,然后在你需要这样的东西的时候调用这个函数,如果你想的话。是的,但这只是隐藏了问题,我的问题主要是教育性的,我知道它变化很小。等待和承诺你在寻找什么?我想的是,不管是谁设计了某个AjaxObject fault,因为它没有回调作为构造函数参数。如果某个AjaxObject执行异步作业,并且每当作业完成时调用onload,我都会担心您的“ifs”黑客代码。如果作业是在
第一个if
ob.on('load')
之间完成的呢?那将是不幸的,嗯,“任何可能出错的事情都会出错”。E.Murphy:)我想的是,设计某个AjaxObject fault的人没有将回调作为构造函数参数。如果某个AjaxObject执行异步作业,并且每当作业完成时调用onload,我会担心您的“ifs”黑客代码。如果作业是在
第一个if
ob.on('load')
之间完成的呢?那将是不幸的,嗯,“任何可能出错的事情都会出错”。E.墨菲:)