【发布时间】:2016-06-11 14:58:58
【问题描述】:
我正在寻找是否有一种方法可以采用通用异步函数(例如 AJAX 或消息上的 Web Worker)并强制它同步运行。
首先——我确实需要这种行为,我知道所有关于异步回调与返回的论点——但在这种情况下,我真的需要等待回调。
如果没有可用的通用解决方案,我会选择一个纯粹在 Worker.prototype.onmessage 上工作的解决方案,因为这是这里的主要用例。
我很确定答案将是“那不可能”,但我想在投降之前检查一下。
我已经研究过 Promise 和生成器,我不想使用第三方库(我知道 Node 的 Fiber/futures)。
一个潜在的用例:
function main(){
worker = new Worker("someWorker.js")
var result = worker.onmessage(function(event){
return event.data;
})
//wait for worker.onmessage
return result;
}
【问题讨论】:
-
相关jQuery问题:stackoverflow.com/q/133310/901048
-
@Blazemonger,谢谢 - 但这仅适用于 ajax 调用。不过绝对值得一提
-
只需启动worker并将所有同步代码(取决于workers结果)放在
onmessage回调中。 Promise 和生成器只是更优雅地解决了同样的问题。 -
@Vaclav,正如我所提到的 - 我真的需要回报,我正在做的项目将所有代码重写为回调是不可行的
标签: javascript synchronization