Хобрук: Ваш путь к мастерству в программировании

angularjs асинхронный http пост обновления данных области

Я создаю модуль чата, используя angularjs.

Я построил алгоритм, который создает новый чат, вот что он делает:

  1. нажмите на кнопку нового чата
  2. показать список доступных людей для чата
  3. выберите одного человека (щелкните), затем вызовите функцию createChat
  4. создать чат создает новый объект чата локально (в коде js) и переводит вас на страницу чата
  5. когда вы отправляете новое сообщение, если chat_id = 0, он создает новый чат в базе данных с почтовым запросом $http, и в случае успеха я устанавливаю chat_id на любой чат_id, возвращенный из HTTP-запроса на публикацию.

моя проблема в том, что в angular запросы являются асинхронными, поэтому установка chat_id внутри функции успеха не обновляет ее за пределами функции успеха, а затем, когда я отправляю следующее сообщение, chat_id по-прежнему равен 0..

Я пытался читать об angularjs $q, но не мог понять, как это помогает.


  • пожалуйста, предоставьте код. 26.12.2014

Ответы:


1

$q — это просто библиотека промисов, что означает, что написание асинхронного кода становится немного проще и читабельнее. Обещания, по сути, являются заполнителями для конечного результата асинхронного вызова. Они позволяют вам связывать функции, которые воздействуют на этот конечный результат, но вызываются только после того, как он у вас есть. Это просто абстракция поверх асинхронного кода — они не обязательно помогут решить вашу проблему. Дополнительную информацию см. в описании MDN обещаний. Информация.

Вы говорите, что «запросы являются асинхронными, поэтому установка chat_id внутри функции успеха не обновляет его за пределами функции успеха», но эта проблема не имеет ничего общего с асинхронным кодом. Вы уверены, что функция успеха действительно работает, и вы не получаете никаких ошибок? Если это так, то, вероятно, это просто проблема правильного охвата. Не могли бы вы опубликовать соответствующий код?

26.12.2014

2

У вас есть две возможности: 1. Заморозить (т.е. показать значок ожидания) чат после первого сообщения, пока вы не получите ответ с chat_id. 2. Перед отправкой первого сообщения сгенерируйте уникальную строку - все сообщения будут иметь эту строку в качестве идентификатора чата, пока не придет настоящий идентификатор чата. Обработайте это на стороне сервера.

26.12.2014
Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..