2016-02-02 2 views
1

У меня есть мобильное приложение с использованием Cordova с AgularJS, которое отправляет сообщение API. Я поддерживаю только браузеры HTML5.Сообщение API Queuing от JavaScript (или Angular JS)

Вызов API не обязательно должен быть мгновенным, это может произойти после некоторого времени. Таким образом, это нормально, если сеть работает медленно или API, но важно то, что вызов произойдет на определенном этапе. Никакой обратной связи на клиенте не требуется, кроме сообщения.

Есть ли какая-нибудь библиотека (чистый JavaScript или угловой JS), которая делает это? Скажите, звоните в библиотеку, и библиотека будет помещать в очередь сообщение и доставлять его на каком-то этапе или повторить попытку через определенное количество времени, пока сообщение не будет доставлено?

Если нет готовой библиотеки, то есть ли у вас какие-либо рекомендации по ее достижению?

N.B. Если браузер перезагружен, сообщения должны быть все еще в очереди (так что для хранения памяти может быть не подходит)

ответ

1

Хорошо, если речь идет только о цепочке запросов и помещении их где-то в объект, вы можете использовать $ q Услуги:

https://docs.angularjs.org/api/ng/service/ $ д

вы также можете приковать эти обещания, хороший, как к (старые ...): http://solutionoptimist.com/2013/12/27/javascript-promise-chains-2/

Если вы также работать с сервисом местоположения от angularJS, вы может даже разрешить все эти данные до того, как приложение загрузится, но Наверное, это не требование.

+0

Я добавил примечание, что я хочу поддержать перезапуск браузера, я не уверен, что это работает после перезапуска браузера, не так ли? – Adam

+1

Если вам нужно состояние, вы можете объединить пример с локальным хранилищем – nhaa123

1

Вы можете использовать bluebird.js для достижения желаемой функциональности. Например.

function a(params) { 
    let p = return new Promise(resolve, reject) { 
     yourLibraryThatCallsYourAPI(params, result => { 
      // Resolves when ever your API sends reply. 
      resolve(result); 
     }, error => { 
      reject(new Error(error)); 
     }); 
    } 

    // After 5 seconds, try again. 
    p.timeout(5000).then(result => { 
     console.info(result); 
    }) 
    .catch(e => { 
     console.error(e.message); 

     return a(params); 
    }); 

    return p; 
} 

... 

a(); 

+0

Является ли это постоянным хранилищем (например, в localStorage или WebSQL)? Поскольку я ищу постоянный (ну, полупостоянный), если приложение перезапускается. – Adam

+0

Если вам нужно состояние, вы можете объединить пример с локальным хранилищем – nhaa123

Смежные вопросы