2014-12-26 142 views
0

我正在使用angularjs构建聊天模块。angularjs async http post update scope data

我建立这将创建一个新的聊天的算法,这就是它的作用:在新的聊天按钮

  1. 点击
  2. 显示avaliable人的名单与
  3. 聊天选择一个人(点击),然后调用函数createChat
  4. 创建聊天(在JS代码)在本地创建新的聊天对象,并把你的聊天页面
  5. 当你提交一个新的消息,如果chat_id = 0,则在d创建新的聊天有一个$ http post请求的atabase,并且在成功中,我将chat_id设置为从http post请求返回的任何chat_id。

我的问题是,在角度,请求是异步,所以设置chat_id成功函数内成功函数外不更新,然后当我发送一条消息chat_id仍然是0 ..

我尝试阅读有关angularjs $ q的内容,但无法理解它的作用。

+2

请提供一些代码。 – cbass

回答

1

$q只是一个承诺库,这意味着它使编写异步代码更容易一点,更易读。承诺基本上是异步调用的最终结果的占位符。它们允许你链接那些作用于最终结果的函数,但只有当你拥有它时才会被调用。它们只是异步代码的抽象 - 它们不一定有助于解决您的问题。请参阅承诺的MDN's description了解更多信息。

你说“请求是异步的,所以在成功函数内部设置chat_id不会在成功函数之外更新它”,但是这个问题与异步代码无关。你确定成功功能实际上在运行吗?你没有收到任何错误?如果是这样的话,这可能只是适当范围的问题。你介意发布一些相关的代码吗?

0

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