在另一个函数中解析/拒绝jquery promise

时间:2013-07-04 19:31:26

标签: javascript jquery promise

我正试图找出一种方法来解决/拒绝一个函数,该函数不能由创建promise / deferred的函数直接访问。

该场景是将请求发送到另一台机器并且对此(可能会或可能不会)的响应由另一台机器处理的场景。一旦我发送请求,我就会启动一个计时器,它会在超时时拒绝承诺。为了稍后根据来自远程计算机的响应来解决/拒绝承诺,我使发送请求和recv响应(如果resp成功解析它)可以访问此承诺,但是如果代码调用了函数发送请求尝试发送多个请求,这将无法正常工作。

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

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

1 个答案:

答案 0 :(得分:0)

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

 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的状态”的表达式。具体而言,这意味着如果履行了返回的承诺,则调用承诺将是;如果返回的promise被拒绝,则调用的promise将是。

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