【问题标题】:Queuing API message from JavaScript (or Angular JS)从 JavaScript(或 Angular JS)排队 API 消息
【发布时间】:2016-05-11 04:55:05
【问题描述】:

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

API 调用不需要是即时的,它可以在一段时间后发生。因此,如果网络出现故障/缓慢或 API 出现故障,这很好,但重要的是调用将在某个阶段发生。除了收到消息外,不需要对客户端的任何反馈。

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

如果没有现成的库,那么你有如何实现这一点的最佳实践吗?

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

【问题讨论】:

    标签: javascript angularjs html cordova ionic-framework


    【解决方案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();
    
    

    【讨论】:

    • 这是一个持久存储吗(比如在 localStorage 或 WebSQL 中)?因为我正在寻找一个永久(半永久)的,以防应用程序重新启动。
    • 如果需要状态,可以将示例与本地存储结合起来
    【解决方案2】:

    好的,如果只是链接请求并将它们放在对象中的某个位置,您可以使用 angularJS 的 $q 服务:

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

    您还可以链接这些承诺,一个很好的方法(旧...): http://solutionoptimist.com/2013/12/27/javascript-promise-chains-2/

    如果您还使用 angularJS 的定位服务,您甚至可以在应用加载之前解析所有这些数据,但我想这不是必需的。

    【讨论】:

    • 我添加了一个注释,我想支持重启浏览器,我不确定重启浏览器后是否有效,是吗?
    • 如果需要状态,可以将示例与本地存储结合起来
    猜你喜欢
    • 2017-09-11
    • 2014-11-01
    • 2012-10-10
    • 2016-06-16
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2021-10-18
    • 2015-09-23
    相关资源
    最近更新 更多