2016-09-29 176 views
0

我有三个功能。呼叫层次是这样的:如何在继续之前等待一个功能完成?

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

function b() { 
    d(); 
} 

我想要的是完成b然后继续做c。但是d是异步的。我无权改变b和d中的任何内容。有什么办法来处理这种情况?对不起我的英语不好。

+6

我想我们需要更多关于这个问题的细节。 'd()'有一个回调函数吗? d()'是否会返回一个你可以链接的承诺? – mc10

+0

你可以查看'callbacks'或首选选项'promise' – Rajesh

+0

如果'd'是异步的,我可以看出几乎异步函数采用回调函数。如果你能说出'd'的功能,那么帮助会更容易。 – choz

回答

4

几乎肯定不是。你需要一个回调,一个承诺或一个事件。

既然你不能改变b(),你不能一个回调参数添加到d()(假设它接受一个摆在首位),你无法捕捉的d()返回值(假设它返回一个承诺第一名)。

当DOM完成时(或者即使您在有DOM的上下文中运行JS),我们也无法告知d()是否触发DOM上的事件。

+0

当你打电话给b时,你可以添加一个回叫吗? – Tom

+0

@Tom - 不会将任何参数传递给'd()' – Quentin

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

+1

您在这两种情况下修改了'b'。问题说这是不允许的。 – Quentin

相关问题