通常,js中的異步函數會返回一個包含解析值或錯誤消息的promise。如果promise風格不適用,則可以將回調作爲參數傳遞給異步函數,其中可以訪問異步函數的結果。回調函數返回值是否有意義?
只是想知道這樣的回調是否有意義有一個r eturn陳述?如果是這樣,誰可以收到返回的值,並有任何有用的用例?
通常,js中的異步函數會返回一個包含解析值或錯誤消息的promise。如果promise風格不適用,則可以將回調作爲參數傳遞給異步函數,其中可以訪問異步函數的結果。回調函數返回值是否有意義?
只是想知道這樣的回調是否有意義有一個r eturn陳述?如果是這樣,誰可以收到返回的值,並有任何有用的用例?
下面是一段代碼,用於說明您試圖理解的概念。
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.5而不是低於 – Guigui
啊! '<' vs '>'的詛咒。接得好。 –
從理論上講,任何異步函數應該返回像處理程序,你可以用它來跟蹤進度,或取消正在進行的異步操作,例如東西:
var timer = setTimeout(..)
clearTimeout(timer)
因爲返回值是唯一的機會你可以以同步的方式獲得這個處理程序,但似乎人們並不十分關心這個問題,並且發明了各種解決異步取消問題的東西,請在my note的action-js上詳細瞭解。
在一個完美的世界,我們應該得到一個處理程序爲每個異步函數:
handler = fs.readFile('...', function(err, data){...});
xhr = ajax('...', function(err, data){...});
...
像這樣的事情? http://jsfiddle.net/97u9pm6o/這真的沒有意義....這是醜陋的代碼,讓我的心靈扭曲。 –
console.log(「result is」,add(5,4,function(result){return result;})),//結果未定義 – Guigui
結果正在返回到add方法。 add方法應該是console.logging。當返回被添加到回調函數時,它將返回到它被調用的地方。 –