tor*_*dro 5 javascript theory asynchronous callback synchronous
我有一个关于如何在 while 循环中执行异步任务直到满足某些条件的问题。这更多是一个理论问题,但我可以看到在某些情况下这可能是一个问题。
我将尝试在示例中演示该问题(我在这里使用 JavaScript,但您可以使用任何语言):
我可以有一个设备,我想保留我的应用程序,直到该设备达到特定状态。如果我可以获取设备状态的方法是同步的,则代码可能如下所示:
// Hold until the desired state is reached
var state = false;
while (!state) {
state = device.getStateSync();
}
// [...] continue the program
Run Code Online (Sandbox Code Playgroud)
我现在的问题是:当我从设备获得的只是异步 getState 函数时,我该如何转换此代码?无论调用的执行时间有多长,代码都应该可以工作,并且应该记住我正在处理有限的内存和堆栈大小。
// [...] This would call the async function in a loop and crash the program
while (!state) {
// [...] something
device.getStateAsync(function(newState) {
state = newState;
});
// [...] something else
}
Run Code Online (Sandbox Code Playgroud)
我发现的这篇文章有一个递归解决方案(http://blog.victorquinn.com/javascript-promise-while-loop)。虽然这是一个很好的解决方案,但在某些时候它会遇到堆栈大小的问题,如果循环调用太频繁。
现在我有直觉认为可能没有解决方案。你知道有什么方法可以做到这一点吗?或者你知道如何证明没有办法做到吗?随意包含更复杂的概念,如线程、承诺或期货。
请记住,这是一个理论问题,该示例适用于我无法更改正在使用的框架(或设备)的情况。
感谢您的每一个回应和想法!
佩德罗
这确实是一个非常理论化的问题。使用异步 API 来获取当前状态会很奇怪。您很可能会拥有:
但如果您确实有此类 API 的具体示例,请告诉我们...
| 归档时间: |
|
| 查看次数: |
3545 次 |
| 最近记录: |