我有三个功能。调用层次结构如下:
function a() {
b();
c();
}
function b() {
d();
}
我想要的是完成b然后继续做c。但是d是异步的。我没有权利改变b和d中的任何内容。有办法处理这个案子吗?抱歉我的英文。
答案 0 :(得分:4)
几乎肯定不是。您需要回调,承诺或事件。
由于您无法更改b()
,因此您无法向d()
添加回调参数(假设它首先接受了一个)并且您无法做到捕获d()
的返回值(假设它首先返回了一个承诺)。
我们无法判断d()
在完成时是否触发了DOM上的事件(或者即使您在存在DOM的上下文中运行JS)。
答案 1 :(得分:-1)
您可以通过两种简单的方法来同步呼叫。
首先,函数b
可以返回一个承诺:
function a() {
b().then(c);
}
function b() {
return new Promise(d);
}
其次,您可以使用回调:
function a() {
b(c);
}
function b(afterCallback) {
d();
afterCallback();
}
在这种情况下,由于您无法修改实际的b或d函数,我只想编写一个实现上述方法之一的新函数,并使用它代替b。