2016-09-29 163 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

相關問題