我的解决方案中遇到了 js 异步回调的问题。这是请求;
- 用户单击“生成 Excel”按钮。
- 在服务器上生成包含大量数据的 excel 文件(大约需要 2 分钟)。
- 在此期间,用户可以在应用程序中进行其他操作,包括页面回发/请求/等。
- 当生成 excel 时,会弹出一个弹出窗口以从服务器下载文件,而不管用户所在的页面如何。
我做了什么 :
- 创建了一个生成 excel 文件 wrt 业务需要的函数“ GenerateReport ”。(服务器端)
- 编写了一个 WebMethod ' GetFilePath ',它递归地检查文件是否已由GenerateReport方法在某个服务器位置生成并返回新文件的文件路径,该方法根据业务逻辑不再返回相同的文件路径。(服务器端)
创建了一个 javascript 函数DownloadLink() ,它以 60 秒的延迟递归调用GetFilePath方法。函数调用如下所示:
PageMethods.GetFilePath(UserId, onSuccess, onError);
OnSuccess 和 OnError 是 JS 回调函数,当下载文件的 URL 可用时触发 OnSuccess,此 JS 方法显示下载弹出窗口,出现错误时调用 OnError。
工作正常,直到发生以下情况。 当从 GetFilePath 方法调用 OnSuccesss 并且同时发生一些其他操作的回发时,由于尚未加载新页面并且不会向用户显示下载弹出窗口,因此永远不会进行 OnSuccess 调用。
我应该怎么做才能解决这个问题,以确保用户获得下载链接。