从JavaScript(或Angular JS)排队API消息

时间:2016-02-02 11:45:00

标签: javascript angularjs html5 cordova ionic-framework

我有一个使用Cordova和AgularJS的移动应用程序,它向API发送消息。我只支持HTML5浏览器。

API调用不需要是即时的,可能会在一段时间后发生。因此,如果网络中断/缓慢或API已关闭,则可以正常运行,但重要的是呼叫将在某个阶段发生。除了收到消息之外,不需要客户端的反馈。

是否有任何库(纯JavaScript或Angular JS)可以做到这一点?比如说调用库,库会将消息排队并在某个阶段交付,或者在设定的时间后再试一次,直到消息被传递?

如果没有现成的库,那么您是否有如何实现这一目标的最佳实践?

N.B。如果浏览器重新启动,则消息应该仍在队列中(因此内存存储可能不合适)

2 个答案:

答案 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();