我正试图找出一种方法来解决/拒绝一个函数,该函数不能由创建promise / deferred的函数直接访问。
该场景是将请求发送到另一台机器并且对此(可能会或可能不会)的响应由另一台机器处理的场景。一旦我发送请求,我就会启动一个计时器,它会在超时时拒绝承诺。为了稍后根据来自远程计算机的响应来解决/拒绝承诺,我使发送请求和recv响应(如果resp成功解析它)可以访问此承诺,但是如果代码调用了函数发送请求尝试发送多个请求,这将无法正常工作。
基本上我想一次只允许/处理一个请求,直到该请求被解析或拒绝,即使调用代码试图发送多个请求。关于如何实现这一点的任何想法?
对不起,如果我的声音到处都是,我对这些东西很新。
答案 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将是。
换句话说,不要把它视为偏远的一方以某种方式拒绝当地的承诺;将其视为返回一个承诺,如果作为处理程序调用,本地方承诺将采用状态。