看如下代码。场景为:前端发起一个 ajax 请求至后端,后端接收请求,通过远程调用其他系统获取数据,然后将数据响应给前端。在这个过程中,我希望后端能将获取的数据存入本地库(saveData)。那么如果我这个saveData方法写在“后端响应给前端(render)之后,”,saveData一定会执行吗?哪怕执行耗时很长?假如前端用户已经在点击其他请求了呢? 谢谢! public void ajaxTest(...) { Object data = getData(); // 此处为以某种方式(如远程)获取数据 saveData(data); // 此处将获得的数据入库 renderJSON(response, data); // 将数据响应给前段 ajax 请求 saveData(data); // 这句一定会执行吗?如果会,那么假设该句耗时较久,写在 renderJSON之后,相比写在renderJSON之前而言,更有利于前端响应速度? } /** * 将JSON对象写入http响应流 * * @param response http响应 * @param obj JSON对象 */ public static void renderJSON(HttpServletResponse response, Object obj) { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = null; try { out = response.getWriter(); out.print(JSONMapper.toJSON(obj).render(false)); } catch (MapperException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (null != out) { out.close(); } } } |
|
20分 |
saveData(data); // 这句一定会执行
如果不依赖存储结果,这个操作又很耗时,放后面是明智的选择。 |
20分 |
renderJSON捕获了CheckedException类异常,出现此种异常及不抛出异常时都执行savedata。
但是没有捕获RuntimeException类异常,此时将跳出,不执行savedata操作。 |
懂了,谢谢两位!
|