Javascript 向同步构建的库google diff match patch添加异步调用

Javascript 向同步构建的库google diff match patch添加异步调用,javascript,asynchronous,diff,patch,Javascript,Asynchronous,Diff,Patch,我正在尝试调整,使其调用之一异步。问题是整个库是同步构建的,因此闭包返回对象,而不是通过执行的回调函数发送对象。我希望使其中一个函数异步,而不必重写整个库,这将是一项艰巨的任务,因为它需要重写堆栈上的每个方法(因为库是非常模块化的)。相反,我希望使用setTimeout进行一个异步调用,该调用设置我想要返回到适当范围的变量的数据。然后,等待该数据的函数将循环,直到收到该数据。这是一种可靠的处理方法吗?它会起作用吗?这方面的好做法是什么?将调用置于设置超时中的唯一好处是,如果您需要进行多次此类调用

我正在尝试调整,使其调用之一异步。问题是整个库是同步构建的,因此闭包返回对象,而不是通过执行的回调函数发送对象。我希望使其中一个函数异步,而不必重写整个库,这将是一项艰巨的任务,因为它需要重写堆栈上的每个方法(因为库是非常模块化的)。相反,我希望使用setTimeout进行一个异步调用,该调用设置我想要返回到适当范围的变量的数据。然后,等待该数据的函数将循环,直到收到该数据。这是一种可靠的处理方法吗?它会起作用吗?这方面的好做法是什么?

将调用置于
设置超时
中的唯一好处是,如果您需要进行多次此类调用,并且希望在调用之间给浏览器一个刷新显示的机会。但是让函数在循环中等待的概念在单线程JS中不起作用:一旦出现结果,您需要提供一个回调函数,该函数将从传递给
setTimeout
的函数中调用。(或者我还不明白你的意思——我建议为你建议的方法显示一点代码。)看看承诺模式:@nnnnnn是的,这正是我想使用
setTimeout
的原因。IE正在锁定,我希望用户能够在处理差异时进行操作。我知道正确的方法是传入cb函数并在setTimeout中执行它。但问题是,我需要重写调用堆栈中的其他函数来处理回调,因为库是非常模块化和复杂的,这将是一场噩梦……如果对diff函数的单个调用需要足够长的时间,IE会锁定,那么
setTimeout
将不会有帮助,因为用户只能在没有JS运行的情况下执行操作(即使JS是通过超时启动的)。diff函数需要重构,才能在离散块中进行处理。如果您需要多个调用,而每个调用都相当快,那么将每个调用置于超时状态将使您受益。@nnnn我将瓶颈隔离为一个
for
循环。我认为,如果该循环成批使用带有
setTimeout
的递归,UI可能会被释放