angularjs async http post更新范围数据

时间:2014-12-26 15:31:52

标签: javascript angularjs asynchronous

我正在使用angularjs构建聊天模块。

我构建了一个创建新聊天的算法,这就是它的作用:

  1. 点击新聊天按钮
  2. 显示与
  3. 聊天的可用人员列表
  4. 选择一个人(单击),然后调用函数createChat
  5. 创建聊天在本地创建新的聊天对象(在js代码中)并带您进入聊天页面
  6. 当你提交新邮件时,如果chat_id = 0,它会在$ http发布请求中在数据库中创建新聊天,并且在成功时我将chat_id设置为http发送请求返回的任何chat_id。
  7. 我的问题是,在angular中,请求是异步的,所以在success函数中设置chat_id并不会在success函数之外更新它,然后当我发送下一条消息时,chat_id仍为0 ..

    我试过阅读angularjs $ q,但无法理解它有多帮助。

2 个答案:

答案 0 :(得分:1)

$q只是一个promise库,这意味着它使编写异步代码更容易一点,更具可读性。承诺本质上是异步调用的最终结果的占位符。它们允许您链接作用于最终结果的函数,但只有在获得后才会被调用。它们只是异步代码之上的抽象 - 它们不一定有助于解决您的问题。有关详细信息,请参阅承诺的MDN's description

你说"请求是异步的,因此在成功函数中设置chat_id不会在成功函数之外更新它,"但是这个问题与异步代码无关。您确定成功功能实际上正在运行,并且您没有收到任何错误吗?如果是这种情况,那可能只是一个适当的范围问题。你介意发布一些相关的代码吗?

答案 1 :(得分:0)

您有两种可能性: 1.在第一条消息之后冻结(即显示等待图标)聊天,直到你收到chat_id的响应。 2.在发送第一条消息之前,生成一些唯一的字符串 - 所有消息都将此字符串作为聊天ID,直到真正的聊天ID到达。在服务器端处理此问题。