在继续之前如何等待一个功能完成?

时间:2016-09-29 08:41:14

标签: javascript

我有三个功能。调用层次结构如下:

function a() {
    b();
    c();
}

function b() {
    d();
}

我想要的是完成b然后继续做c。但是d是异步的。我没有权利改变b和d中的任何内容。有办法处理这个案子吗?抱歉我的英文。

2 个答案:

答案 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。