2015-10-18 64 views
0

通常,js中的異步函數會返回一個包含解析值或錯誤消息的promise。如果promise風格不適用,則可以將回調作爲參數傳遞給異步函數,其中可以訪問異步函數的結果。回調函數返回值是否有意義?

只是想知道這樣的回調是否有意義有一個r eturn陳述?如果是這樣,誰可以收到返回的值,並有任何有用的用例?

+0

像這樣的事情? http://jsfiddle.net/97u9pm6o/這真的沒有意義....這是醜陋的代碼,讓我的心靈扭曲。 –

+0

console.log(「result is」,add(5,4,function(result){return result;})),//結果未定義 – Guigui

+0

結果正在返回到add方法。 add方法應該是console.logging。當返回被添加到回調函數時,它將返回到它被調用的地方。 –

回答

0

下面是一段代碼,用於說明您試圖理解的概念。

var callback = function(err, result){ 
    if(err){ 
     console.log(err); 
     return err; 
    } 
    callAnotherFunction(result); 
}; 

function getRandom(cb){ 
    //do something 
    var result = Math.random(); 
    if(result > 0.5){ 
    return cb(result); 
    } 
    return cb(null, result); 
} 
getRandom(callback); 

如果隨機數小於0.5,則函數getRandom()將返回一個錯誤,否則返回一個值。回調然後根據傳遞給回調函數的值以不同的方式處理響應。正如你所看到的,回調中的return聲明有很大的不同。順便說一下,上面的例子演示了NodeJS中的標準error-first design pattern

+0

非常感謝,優點!只是似乎超過0.5而不是低於 – Guigui

+0

啊! '<' vs '>'的詛咒。接得好。 –

0

從理論上講,任何異步函數應該返回像處理程序,你可以用它來跟蹤進度,或取消正在進行的異步操作,例如東西:

var timer = setTimeout(..) 
clearTimeout(timer) 

因爲返回值是唯一的機會你可以以同步的方式獲得這個處理程序,但似乎人們並不十分關心這個問題,並且發明了各種解決異步取消問題的東西,請在my noteaction-js上詳細瞭解。

在一個完美的世界,我們應該得到一個處理程序爲每個異步函數:

handler = fs.readFile('...', function(err, data){...}); 
xhr = ajax('...', function(err, data){...}); 
...