как обрабатывать тайм-ауты соединения при вызове методов сервера

Как обрабатывать тайм-ауты соединения с серверными методами? Я использую метеор большую часть времени для мобильных приложений ios/android (без веб-приложений, реальных версий магазина приложений), и мобильные пользователи часто имеют тайм-ауты соединения. Поэтому иногда они не получают обратной связи, когда нажимают кнопку, потому что соединение слишком плохое.

например У меня есть метод только на стороне сервера для вставки нового document со специальным text в коллекцию MyTextCollection

поэтому мои методы выглядят примерно так

Meteor.methods({
    addTextToMyTextCollection: function(text) {
        //some input checks and error stuff here 
        //if something is wrong It will throw new Error.

        ...

        //everything is fine so insert text into collection
        MyTextCollection.insert({text:text});

        return someResult
    }
});

на стороне клиента я бы позвонил

Meteor.call("addTextToMyTextCollection", myTextILikeToStore, function(error, result){
  if (error) {
    // I have an error 
  else {
    // I have a result
  }
});

Моя проблема в том, что я понятия не имею, как справиться с плохим соединением Wi-Fi / 4G и т. Д. Здесь, чтобы дать пользователям обратную связь (например, загрузка, подождите, или ваше соединение прервано, попробуйте еще раз). Метод просто возвращает Error, когда что-то не так с моим permission или с моим text, который я использовал в качестве параметра. В противном случае он возвращает мне result.

Можно ли ограничить время на стороне клиента для выдачи ошибки после того, как вызов метода ничего не возвращает?

Что происходит, когда моему устройству удалось вызвать метод addTextToMyTextCollection, но соединение было прервано при получении результата/ошибки? Как я могу справиться с этим для моего пользовательского интерфейса?

Мне не нравится оптимистичный пользовательский интерфейс (вызов метода на стороне сервера/клиента), потому что это не всегда ожидаемый результат (например, запрашивание только серверной информации, которую клиент не может знать)


person Dude    schedule 31.03.2016    source источник


Ответы (1)


Я бы рекомендовал глобальный блок автозапуска, который отслеживает состояние подключения через Meteor.status. Вы можете использовать это для отображения сообщения об ошибке при потере соединения.

person Brendan Turner    schedule 31.03.2016
comment
это то, что я делаю прямо сейчас, но это не решает мою проблему с медленным соединением. флаг состояния соединения (например, сохраненный в переменной сеанса) просто говорит: OK, я подключен к серверу, я подключаюсь прямо сейчас или соединение прервано. Это просто решение ДА или НЕТ, но, черт возьми, ваше соединение такое медленное. - person Dude; 31.03.2016