2014-12-26 118 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到達。在服務器端處理這個問題。