【发布时间】:2018-08-28 19:32:53
【问题描述】:
所以,这无疑是我所描述的一个非常愚蠢的案例,但我正在使用的代码正在这样做,我现在要么重写它,要么找到一种方法来处理它。 我的问题所指的流程如下:
函数 A 调用函数 B。然后,函数 B 被函数 A 调用后,函数 B 调用自身。然后,在这个递归调用中,函数 B 调用函数 C。函数 C 返回一个 promise。
我想要做的是将函数 C 返回的承诺“传播”到函数 A。 我已经掌握了理论上的语法,但我不知道这是否真的可行,尤其是函数 B 的递归调用。
我只想知道这是否可行,如果可行,我该怎么做。我能理解你是否觉得这很可怕,我也能理解,但我必须以某种方式处理它,除非没有其他选择,否则我不想完全修改这段代码。
编辑:这是代码,我在代码的关键部分周围放置了一些非常大的空格,以便您更容易找到所需的内容。
async function getTable(start, ende, liebraum)
{
$.post("../include/returnTable.php", {
anfang: start,
ende: ende,
art: art
}).then((data) => {
document.getElementById("tablediv").innerHTML = data
})
//return promiseToBeReturnedFromGetTable;
return fillRooms(liebraum);
}
async function fillRooms(liebraum)
{
var bool = false
if (!bool)
{
bool = !bool;
fillRooms(liebraum);
}
else
{
return Disablen(liebraum);
}
async function Disablen(liebraum)
{
if(usecase1)
{
return $.post('../include/getSitzOptions.php',{
raum: tisch,
art: art,
start: anfang,
ende: ende
}).then((data) => {
$('#sitz').html(data);
})
}
else if(usecase2)
{
return $.post('../include/getSitzOptions.php',{
raum: tisch,
art: art,
tagStart: tagAnfang,
tagEnde: tagEnde
}).then((data) =>{
$('#sitz').html(data);
})
}
else if(usecase3)
{
return $.post('../include/getSitzOptions.php',{
raum: tisch,
art: art,
WeekStart: WochenStart,
WeekEnd: WochenEnde
}).then((data) => {
$('#sitz').html(data);
})
}
}
}
【问题讨论】:
-
是的,很可能,你能发布你的代码吗?
-
是的,给我一点时间
-
当然可以,但请记住,函数 A 和 B 也希望成为 Promise,或者至少将 Promise 向下传递。现在使用
async / awaitrecursive Promises 与无异步递归没有什么不同,这是一件很棒的事情,而且您还可以免费获得尾递归。 -
第一个函数没有多大意义,
$.post无法访问,你为什么要return await?只需单独返回Promise。你能把它修剪成minimal reproducible example吗? (182行有点多) -
我对这个问题投了反对票,因为代码格式很糟糕,浪费了读者的时间
标签: javascript recursion promise