处理自定义JavaScript异步事件

处理自定义JavaScript异步事件,javascript,jquery,asynchronous,Javascript,Jquery,Asynchronous,我们有一个JavaScript库,它位于JavaScript中的两个专有库(lib_Upper和lib_Lower)之间。我们的库将从lib_Lower返回的值转换为lib_Upper期望的值/函数,即 lib_Upper -> lib_US -> lib_Lower lib_Lower以异步方式运行,但不返回承诺或其他延迟对象。同样,lib_Upper的作用就像一切都是同步的 因此,我们需要转换为异步到同步调用 通话过程如下: lib_Upper calls lib_US.

我们有一个JavaScript库,它位于JavaScript中的两个专有库(lib_Upper和lib_Lower)之间。我们的库将从lib_Lower返回的值转换为lib_Upper期望的值/函数,即

lib_Upper  ->  lib_US  -> lib_Lower
lib_Lower以异步方式运行,但不返回承诺或其他延迟对象。同样,lib_Upper的作用就像一切都是同步的

因此,我们需要转换为异步到同步调用

通话过程如下:

lib_Upper calls lib_US.fn()
lib_US calls lib_lower.fn2()
lib_Lower sends the request over a WebSocket and returns
在这一点上,所有的气泡都会回到lib_Upper

一段时间后,WebSocket返回一个响应:

lib_Lower calls lib_US.callbackFn()
lib_US library needs to return the data from lib_lower to lib_Upper
在这一点上,我们被卡住了,因为我们已经回到了上利布

由于对JavaScript非常陌生,在回调发生之前,似乎很难“挂起”lib_Upper的调用

我们如何将异步事件放入这个链中,使得lib_Upper只从回调返回数据


谢谢。

根据您对流程的描述,您应该能够在Lib_Lower回调后传递Lib_Upper所做的一切,如下所示:

libLower(someArgs, function(data) { libUpper.bar(translator(data)); })

那么,让你的图书馆归还承诺。我们不能改变图书馆的上限或下限。我们只限于在中间做翻译。如果lib_Upper既不支持承诺也不支持回调,那么如果需要异步行为,您只需切换到另一个库。如果您对库和调用更为具体,我们可以帮助您进行转换。不能——它是专有的,它实现客户机和客户机所需的业务逻辑,客户已经授权使用这两个库,这就是为什么我们被困在中间。谢谢-但这不是如何实际工作的吗?libLower需要一个函数“bar”,而他们所做的是调用libUS,并在libLower执行异步操作时期待同步响应。