我有一个使用Cordova和AgularJS的移动应用程序,它向API发送消息。我只支持HTML5浏览器。
API调用不需要是即时的,可能会在一段时间后发生。因此,如果网络中断/缓慢或API已关闭,则可以正常运行,但重要的是呼叫将在某个阶段发生。除了收到消息之外,不需要客户端的反馈。
是否有任何库(纯JavaScript或Angular JS)可以做到这一点?比如说调用库,库会将消息排队并在某个阶段交付,或者在设定的时间后再试一次,直到消息被传递?
如果没有现成的库,那么您是否有如何实现这一目标的最佳实践?
N.B。如果浏览器重新启动,则消息应该仍在队列中(因此内存存储可能不合适)
答案 0 :(得分:1)
好的,如果它只是链接请求并将它们放在某个对象中,您可以使用angularJS' $ q服务:
https://docs.angularjs.org/api/ng/service/ $ Q
你也可以链接这些承诺,一个很好的操作方法(旧...): http://solutionoptimist.com/2013/12/27/javascript-promise-chains-2/
如果您还使用angularJS中的位置服务,您甚至可以在应用加载之前解析所有这些数据,但我认为这不是必需的。
答案 1 :(得分:1)
您可以使用bluebird.js来实现所需的功能。 E.g。
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();