2016-09-02 50 views
0

首先,看看這個例子:如何從同步回調中​​返回?

var calculate = function(callback) { 
    // calculating... 
    callback(5); 
} 

var parent = function() { 
    var x = 0; 

    var calculatedValue = calculate(function(output) { 
    return output; // return #1 

    x = output; 
    }); 

    return x; // return #2 

    return calculatedValue; // return #3 
} 

我的目標是calculate函數內「計算」的值,該值必須由parent函數返回。

我應該在哪裏放置return語句,以及爲了實現這個目的我應該返回什麼?

我試過三種情況:

return #1 這裏output值由callback函數返回,而不是parent功能,所以父母返回undefined。

return #2 這裏執行callback功能之前返回x的值,所以父母返回0

return #3 + return #1 在這裏,我試圖從callback返回output,然後(以爲回調的返回值可能以某種方式成爲calculate本身的返回值),返回calculatedValue,但同樣,父返回未定義。

請提出一個方法,並普拉克公司在here

+0

「計算」是異步的嗎?你能告訴我們你的實際代碼嗎? – Bergi

+0

我希望不是。參見[這裏](http://plnkr.co/edit/WdF8TzxPUPcIZDIVY94O?p=preview)。沒有實際的代碼,這只是一個想法。不用擔心:) –

+1

如果這真的是你所有的代碼,那麼它是同步的(我曾預計會有更多的behing'//計算...')。那麼爲什麼你使用回調而不是簡單地執行'return 5'? – Bergi

回答

3

在這種特別情況下,你的回調是同步,這意味着你可以從它返回,像這樣:

var calculate = function(callback) { 
    // calculating... 
    return callback(5); 
} 

然後,你可以像父母一樣返回:

var parent = function() {  
    var calculatedValue = calculate(function(output) { 
    return output; // tells the callback to do nothing with the output, just return it. 
    }); 

    return calculatedValue; // return from parent 
} 

請注意,如果calculate異步函數,則此方法將不起作用。看看這個How do I return the response from an asynchronous call?

+0

好吧,我試過這個[這裏](http://plnkr.co/edit/WdF8TzxPUPcIZDIVY94O?p=preview),但仍然有'undefined'。我希望我的回調是同步的。 –