2013-06-02 105 views
0

我是一個JavaScript的初學者,我仍然無法繞過功能和這些事情的傳遞。我需要在回調中設置一個特定的值,然後在該函數完成執行後返回它。但是,在返回語句到達之前,這個函數似乎永遠不會執行。這裏是一個簡化的例子:一旦異步回調完成,返回正確的值

function otherfunction(somefunction) {} 

function foo() { 
    var bar = 'random value'; 

    otherfunction(function() { 
    bar = 'correct value'; 
    }); 
    return bar; 
} 

console.log(foo()); 

這是jsfiddle

+1

你不在'otherfunction'內調用'somefunction'。 – atomman

+2

相關:http://stackoverflow.com/q/14220321/ –

回答

4

TL; DR;你不能。


當一個函數簽名接受一個功能,它尖叫該函數是異步的,並調用該函數作爲回調一旦完成。

在這種情況下,otherfunction將是異步函數,並且將somefunction作爲回調一旦otherfunction完成執行來執行。

現在,無法從同步函數(foo)返回異步函數(otherfunction)的結果。而是在撥打foo中的otherfunction後,延遲執行代碼以在回調中執行(demo);

function foo() { 
    otherfunction(function() { 
    var bar = 'correct value'; 

    console.log(bar); 
    }); 
} 

現在我很感激你可能想對otherfunction的結果做不同的事情;並不總是console.log它;你可以通過修改foo來修復這個問題也可以接受一個回調;

function foo(callback) { 
    otherfunction(function() { 
    var bar = 'correct value'; 

    callback(bar); 
    }); 
} 

然後你會這樣稱呼它(demo);

foo(function (newBar) { 
    console.log(newBar); 
}); 

foo(function (newBar) { 
    // do whatever with newBar 
}); 
+0

我現在明白回調是如何工作的。但是現在我需要在另一個需要返回'foo'返回數據的回調中調用'foo'。這會很棘手,但我想我可以用你給我的信息弄清楚。謝謝! – AaronAAA