Javascript 从递归调用返回承诺

Javascript 从递归调用返回承诺,javascript,recursion,promise,Javascript,Recursion,Promise,所以,我所描述的这是一个相当愚蠢的案例,但是我正在使用的代码正在做这件事,我现在要么重写它,要么找到处理它的方法。 我的问题涉及的流程如下所示: 函数A调用函数B。然后,在被函数A调用后,函数B调用自己。然后,在这个递归调用中,函数B调用函数C。函数C返回一个承诺 我想做的是将函数C返回的承诺“传播”到函数A。 理论上我已经有了语法,但我不知道这是否真的可行,特别是对于函数B的递归调用 我只是想知道这是否可能,如果可能,我怎么做。我可以理解,如果你觉得这非常令人敬畏,我也一样,但我必须以某种方式

所以,我所描述的这是一个相当愚蠢的案例,但是我正在使用的代码正在做这件事,我现在要么重写它,要么找到处理它的方法。 我的问题涉及的流程如下所示:

函数A调用函数B。然后,在被函数A调用后,函数B调用自己。然后,在这个递归调用中,函数B调用函数C。函数C返回一个承诺

我想做的是将函数C返回的承诺“传播”到函数A。 理论上我已经有了语法,但我不知道这是否真的可行,特别是对于函数B的递归调用

我只是想知道这是否可能,如果可能,我怎么做。我可以理解,如果你觉得这非常令人敬畏,我也一样,但我必须以某种方式与它合作,我想让我彻底检修这段代码,除非没有其他选择

编辑:这是代码,我在代码的关键部分放了一些很大的空格,这样你就更容易找到你想要的

异步函数getTable(start、ende、liebraum) { $.post(“../include/returnTable.php”{ 安芳:开始,, 恩德:恩德, 艺术:艺术 })。然后((数据)=>{ document.getElementById(“tablediv”).innerHTML=data }) //将承诺从GetTable返回; 返回房间(liebraum); } 异步函数填充室(liebraum) { var bool=false 如果(!bool) { bool=!bool; 填充室(liebraum); } 其他的 { 返回失能(liebraum); } 异步函数禁用(liebraum) { 如果(用例1) { 返回$.post(“../include/getSitzOptions.php”{ 劳姆:蒂希, 艺术:艺术, 起点:安芳, 恩德:恩德 })。然后((数据)=>{ $('#sitz').html(数据); }) } else if(用例2) { 返回$.post(“../include/getSitzOptions.php”{ 劳姆:蒂希, 艺术:艺术, tagStart:tagAnfang, 泰根德:泰根德 })。然后((数据)=>{ $('#sitz').html(数据); }) } else if(用例3) { 返回$.post(“../include/getSitzOptions.php”{ 劳姆:蒂希, 艺术:艺术, WeekStart:WochenStart, 周末:沃切南德 })。然后((数据)=>{ $('#sitz').html(数据); }) } }
}理解您的代码和您的尝试有点棘手

但是用你的描述。->

函数A调用函数B。然后,在被函数A调用之后, 函数B调用它自己。然后,在这个递归调用中,函数B 调用函数C。函数C返回一个承诺

我已经创建了一个执行上述操作的工作代码段,但它只是一个简单的倒计时计时器。当然,这对于倒计时来说有点复杂,但希望这是一种展示a如何调用B,B如何调用自己的方式,最终返回的是C:)呸,真是一口……)

constdelay=ms=>newpromise((r,j)=>setTimeout(r,ms));
//函数C返回一个承诺。
常量C=async()=>{
返回“发射”;
}
//函数B调用自己,
//函数B调用函数C
常数B=异步(计数)=>{
控制台日志(计数);
等待延迟(500);
如果(计数<1)返回C();
返回B(计数-1);
}
//函数A调用函数B
常数A=异步(计数)=>{
返回B(计数);
}
console.log(“开始倒计时”);
A(10)。
然后(msg=>console.log(msg))。
catch(e=>console.log(e));

是的,非常可能,你能发布你的代码吗?是的,请给我一点时间当然可能,但请记住,功能a&B也希望成为承诺,或者至少传递承诺链。现在使用
async/await
递归承诺与非异步递归没有什么不同,还有额外的好处,你可以免费获得尾部递归。第一个函数没有太多意义,
$。post
无法访问,为什么
返回await
?只需单独返回
承诺
。你能把它修小一点吗?(182行有点多)我否决了这个问题,因为代码格式很糟糕,浪费了读者的时间