2014-12-26 2 views
0

나는 angularjs를 사용하여 채팅 모듈을 만들고 있습니다. (새 채팅 버튼을angularjs 비동기 http 게시 범위 데이터

  1. 클릭 사용 가능한 사람들의
  2. 쇼 목록을 한 사람을 선택
  3. 와 채팅을 클릭 :

    나는이 그것이 무엇을하는 새로운 채팅을 생성하는 알고리즘을 내장)를 호출 한 다음 createChat 함수를 호출하십시오.
  4. 채팅 만들기 새 채팅 객체를 로컬 (js 코드)로 생성하고 채팅 페이지로 이동합니다.
  5. 새 메시지를 전송할 때 chat_id = 0이면 d atabase에 $ http post 요청을 보내고, 성공시 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로 포함됩니다. 이것을 서버 측에서 처리하십시오.