是 Javascript
callbacks
只是作为函数调用中的参数发送的匿名函数?
例如,
mySandwich('ham', 'cheese', function() {
alert('Finished eating my sandwich.');
});
最佳答案
JavaScript 回调是作为值传递给异步函数的函数,目的是为了继续。
函数是值:
因此,在 JavaScript 中,您可以传递类似值的函数。您可以通过多种方式引用函数:
doSomeWork(function (err, result) {
if (err) {
throw new Error(err);
} else {
console.log(result);
}
});
doSomeWork(function magicalCallback(err, result) {
if (err) {
throw new Error(err);
} else {
console.log(result);
}
});
(命名每个函数是一个聪明的主意,因为您可以在堆栈跟踪中看到它)
var someFunction = function callItWhatYouWant(err, result) {
if (err) {
throw new Error(err);
} else {
console.log(result);
}
}
// reference the callback stored in the someFunction variable
doSomeWork(someFunction);
function callItWhatYouWant(err, result) {
if (err) {
throw new Error(err);
} else {
console.log(result);
}
}
// reference the callback function using the function name
doSomeWork(callItWhatYouWant);
继续?
继续就是下一步。当你调用一个异步函数时,它需要通知你它已经完成。回调充当下一步,即异步函数将在完成后回调您。
所以回调只是一个用于特定目的的函数参数,即延续。
回调签名
回调应该采用哪些参数没有标准,但在 Node.js 社区中,我们采用了通用签名
function (err, result)
哪里
err
是 Error
如果发生了不好的事情,则反对,或者 null
如果事情成功。如果事情变糟 result
一般是undefined
, 否则它包含结果。所以你的回调通常由任何一个调用callback(new Error("oops"));
或者
callback(null, result);
另请注意,异步函数的最后一个参数作为回调参数是正常的
function callLater(delay, args, callback) {
setTimeout(function () {
callback(null, args);
}, delay);
}
关于javascript - javascript 回调只是作为函数调用中的参数发送的匿名函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23882149/