所以,这确实是我正在描述的一个非常愚蠢的情况,但是我正在使用的代码正在执行它,而我现在正在重写它或找到一种处理它的方法。 我的问题所涉及的流程如下:
功能A调用功能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);
})
}
}
}
答案 0 :(得分:1)
了解您的代码和尝试执行的操作有些棘手。
但是请使用您的描述。->
函数A调用函数B。然后,在函数A调用之后, 函数B调用自身。然后,在此递归调用中,函数B 调用函数C。函数C返回一个Promise。
我创建了一个可完成上述操作的代码段,但使用了一个简单的倒数计时器。当然,这对于倒数计时器来说有点复杂,但希望是一种显示A如何调用B,B如何调用自身的方法,最终返回的是C .. :)是一口。 >
const delay =ms => new Promise((r, j)=>setTimeout(r, ms));
//Function C returns a promise.
const C = async () => {
return "Blast off.";
}
//Function B calls itself,
//function B calls function C
const B = async (count) => {
console.log(count);
await delay(500);
if (count < 1) return C();
return B(count - 1);
}
//function A calls Function B
const A = async (count) => {
return B(count);
}
console.log("Start countdown");
A(10).
then(msg => console.log(msg)).
catch(e => console.log(e));