【问题标题】:resolve/reject jquery promise in another function在另一个函数中解决/拒绝 jquery 承诺
【发布时间】:2013-07-02 20:40:23
【问题描述】:

我正在尝试找出一种方法来解决/拒绝创建 promise/deferred 的函数无法直接访问的函数中的 jquery promise。

这种情况是一个请求被发送到另一台机器并且对此的响应(可能会也可能不会)由另一个函数处理。一旦我发送请求,我就会启动一个计时器,它会在超时时拒绝承诺。为了稍后根据来自远程机器的响应来解决/拒绝承诺,我让发送请求和接收响应(如果响应成功则解决)函数都可以访问这个承诺,但是如果调用的代码发送请求的功能尝试发送多个请求,这不起作用。

基本上,我想一次只允许/处理一个请求,直到该请求被解决或拒绝,即使调用代码尝试发送多个请求。关于如何实现这一点的任何想法?

对不起,如果我的声音到处都是,我对这些东西很陌生。

【问题讨论】:

  • 听起来你的想法有点不对劲。特别是,如果请求以正确的方式发出(使用jQuery.ajax(...) 或其速记方法之一),那么所有解析/拒绝将由 jQuery 为您管理。您需要做的就是以一种或多种方式指定成功/错误处理程序,它们将在响应到达或请求超时时触发。发布一些代码,我相信有人会提供进一步的建议。

标签: javascript jquery promise


【解决方案1】:

如果我正确理解您的问题,您需要做的是配置远程端以返回一个承诺,然后调用该例程并从本地端的处理程序中返回其值:

 Promise
    .when (ready_for_remote_call)
    .then (function () {return remote_action_returning_promise ();})
    .then (
        function () {console.log("remote succeeded");},
        function () {console.log("remote failed");}
    )
;

注意,这可以简化为

    .then (remote_action_returning_promise)

完全不同
    .then (remote_action_returning_promise())

这没有任何用处。想一想。

这是承诺的一个方面,有点难以理解。处理程序可能会返回承诺,然后将其“插入”到承诺链中。规范使用了承诺“假设状态”返回承诺的表达。具体来说,这意味着如果返回的承诺被履行,则调用承诺将是;如果返回的 Promise 被拒绝,调用的 Promise 将会被拒绝。

换句话说,不要认为它是远程端以某种方式拒绝本地端的承诺;将其视为返回一个 Promise,如果将其作为处理程序调用,则本地侧 Promise 将采用以下状态。

【讨论】:

    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2018-11-17
    • 2018-11-20
    相关资源
    最近更新 更多