jQuery的异步问题Javascript

Async Problems with jQuery & Javascript

本文关键字:Javascript 问题 异步 jQuery      更新时间:2023-09-26

我在原地打转,似乎无法从Stack或Google目前可用的资源中找到解决方案。肯定有什么我没注意到的,也许你能帮上忙?

故事简介:

  • 一个javascript函数在点击时启动,并在数据库中创建一个新的联系人。
  • 在创建成功后,会调用其他函数来切换必要的设置,这取决于几个复选框。
  • 当前异步调用,导致只有最后一个函数调用才能成功更新联系人。
  • 我无论如何也不能接一个接一个的电话去上班。
  • 每个调用在成功完成后返回一个JsonResult,如果这对应用程序的其他区域有帮助的话。

当前代码如下: function CreateClicked(){ Contact.Create(**bunch of params**, function(data){ if(data.success) { togglePrimary(data.newId); toggleBilling(data.newId); toggleTechnical(data.newId); toggleBalance(data.newId); toggleSecurity(data.newId); toggleMarketing(data.newId); Modal.Load(**loads a modal view**); } } }

切换函数如下所示: function togglePrimary(id) { if ($("#contact_admin_primaryrole").prop('checked')) {Contact.TogglePrimaryRole(id);} }

调用一个像这样的控制器函数:

public JsonResult TogglePrimaryRole(int contactId){ try{ var c = new Contact(contactId); c.IsPrimaryContact = !c.IsPrimaryContact; c.Update(AuthenticatedUser.Username, !c.IsPrimaryContact); return Json(JSONResponseFactory.SuccessResponse("Contact updated successfully")); } catch (Exception ex){ return Json(JSONResponseFactory.ErrorResponse(ex.Message)); } }

我应该如何去设置这个,以便每个切换函数不开始,直到前一个已经完成并返回Json响应,不管成功吗?

任何想法?

欢呼,丢在

使用jQuery承诺会有帮助:

togglePrimary(data.newId).then(toggleBilling(data.newId)).then(toggleTechnical(data.newId)

等。

只有当上一个函数成功时才会运行下一个函数。如果你想调用与结果无关的函数,那么使用always()而不是then()

togglePrimary(data.newId).always(toggleBilling(data.newId)).always(toggleTechnical(data.newId)

这将需要引用jquery 1.6或更高版本。要从CDN引用,请添加以下

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>

我似乎无法得到任何地方与承诺,或javascript函数链与回调…所以我将每个状态的值转换为字符串数组,并在控制器中对其进行解析!

谢谢你的帮助