Javascript 将JS应用程序从同步调用重写为异步调用

Javascript 将JS应用程序从同步调用重写为异步调用,javascript,ajax,asynchronous,synchronous,sjax,Javascript,Ajax,Asynchronous,Synchronous,Sjax,我正在尝试迁移一个旧的Javascript应用程序,以使用AsyncJAX(AJAX),而不是对AJAX(SJAX)的同步调用。我考虑过几种方法,每种方法都需要相当长的时间 1) 使用异步/等待 为了完成这项工作,我必须预先编写每个函数,这些函数会导致通过“async”调用堆栈中某处的SJAX,并通过“wait”调用SJAX 2) 分析所有可能的stacktraces(我不知道有任何工具可以为JS实现这一点),并使用回调/承诺手工重新编写(目前并不真正关心代码的清洁度。应用程序中出现了200多个

我正在尝试迁移一个旧的Javascript应用程序,以使用AsyncJAX(AJAX),而不是对AJAX(SJAX)的同步调用。我考虑过几种方法,每种方法都需要相当长的时间

1) 使用异步/等待 为了完成这项工作,我必须预先编写每个函数,这些函数会导致通过“async”调用堆栈中某处的SJAX,并通过“wait”调用SJAX

2) 分析所有可能的stacktraces(我不知道有任何工具可以为JS实现这一点),并使用回调/承诺手工重新编写(目前并不真正关心代码的清洁度。应用程序中出现了200多个SJAX调用,因此我预计可能会有更多的stacktraces需要处理

3) 在实际数据获取(SJAX调用)之前抛出一个错误,在某个地方记录调用方,并在数据可用时重复调用(可能还有其他问题,想象一下使用“stateful”变量运行同一代码两次)

4) 完全不同的东西


我的问题是,你认为哪种方法最好。我知道这是基于观点的,但也许有其他方法可以优雅地处理这一点(第4点)。如果你知道答案。。。开枪吧

我不行
async
await
是管理承诺的工具,如果你没有承诺来管理它们,那就是浪费时间。我真的很好奇他们一开始是如何进行SJAX调用的。那是什么?我不知道javascript能够同步发出请求。当请求仍然挂起时,整个应用程序是否冻结?@TKoL:您可以使用
true
作为
XMLHttpRequest
方法的第三个参数有一个类似的选项传递给XHR。是的,如果您在Web Worker之外执行此操作,它会完全按照您的想法执行:冻结所有内容。@Benny您必须先完成每个SJAX调用,并使其自身异步,方法是删除系统中使其同步的任何选项或参数。然后,您必须深入到每个调用ajax并使其异步的函数,以及每个调用ajax并使其异步的函数,等等。一路向上。Godspeed这项工作听起来好像真的会从完全从头重写tbh中受益。如果你对整个应用程序的功能以及各部分如何协同工作有一个良好的心理模型,这是一个选项吗?1不会起作用
async
await
是管理承诺的工具,如果你没有承诺来管理它们,那就是浪费时间。我真的很好奇他们一开始是如何进行SJAX调用的。那是什么?我不知道javascript能够同步发出请求。当请求仍然挂起时,整个应用程序是否冻结?@TKoL:您可以使用
true
作为
XMLHttpRequest
方法的第三个参数有一个类似的选项传递给XHR。是的,如果您在Web Worker之外执行此操作,它会完全按照您的想法执行:冻结所有内容。@Benny您必须先完成每个SJAX调用,并使其自身异步,方法是删除系统中使其同步的任何选项或参数。然后,您必须深入到每个调用ajax并使其异步的函数,以及每个调用ajax并使其异步的函数,等等。一路向上。Godspeed这项工作听起来好像真的会从完全从头重写tbh中受益。如果你对整个应用程序的功能以及各部分如何协同工作有一个很好的心智模型,这是一个选项吗?