【问题标题】:Aurelia stop overload of http requestsAurelia 停止 http 请求的过载
【发布时间】:2016-10-28 06:27:47
【问题描述】:

我正在使用 Aurelia,并且有多个 Promise 调用我的 API。如果我不断地单击按钮以一遍又一遍地触发承诺,后端将超时。我怎样才能停止/停止我正在触发的 Promise 并只获取最新的 Promise,以免 API 过度工作并导致超时?

【问题讨论】:

    标签: javascript aurelia


    【解决方案1】:

    这不是 aurelia 特有的,它发生在任何异步事件实现中。

    1. 当您单击按钮时,将调用事件处理程序。
    2. 事件处理程序向您的服务器发送一个异步 AJAX 请求。因为它是异步的,所以您的代码和应用程​​序会在请求发生时继续运行。
    3. 假设您单击的速度比请求完成的速度快,用户可以再次单击该按钮并同时发送第二个 AJAX 请求。
    4. 更糟糕的是,并发请求甚至可能无序完成(即,后一个请求在前一个请求之前完成)。您的代码应该准备好正确处理。

    如果您不希望这种行为,您可以阻止用户再次提交,直到 AJAX 请求完成。例如,您可以:

    • 发送请求时禁用按钮;或
    • 显示模式“加载”屏幕/微调器,以防止在请求进行时与应用程序进行任何交互。

    请注意,提供用户反馈无论如何都是好的用户体验。网络请求可能由于多种原因而延迟,最好提供一些反馈,让他知道正在发生的事情。

    【讨论】:

    • 感谢您的反馈。我可以实现我自己的,只是想知道 Aurelia 是否有办法取消当前的 Promise 并获取最新的点击。我会把东西放好。
    • “取消一个promise”不是一般的事情,但是对于AJAX请求的promise一般是可以取消的。这取决于您使用的 API,但这应该是可能的,是的。也许你会对我对这个问题的回答感兴趣,这非常相似(用于前瞻控件的并发 AJAX):stackoverflow.com/questions/40293954/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多