Javascript callbacks匿名函数是否只是作为函数调用中的参数发送?
例如,
mySandwich('ham', 'cheese', function() {
alert('Finished eating my sandwich.');
});
Run Code Online (Sandbox Code Playgroud)
JavaScript 回调是作为值传递给异步函数的函数,目的是继续执行。
因此,在 JavaScript 中,您可以传递类似值的函数。您可以通过多种方式引用函数:
传递一个文字匿名函数作为回调
doSomeWork(function (err, result) {
if (err) {
throw new Error(err);
} else {
console.log(result);
}
});
Run Code Online (Sandbox Code Playgroud)传递一个文字命名函数作为回调
doSomeWork(function magicalCallback(err, result) {
if (err) {
throw new Error(err);
} else {
console.log(result);
}
});
Run Code Online (Sandbox Code Playgroud)
(命名每个函数是一个聪明的主意,因为您可以在堆栈跟踪中看到它)
传入一个变量的值,该变量恰好将函数存储为回调
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);
Run Code Online (Sandbox Code Playgroud)通过引用函数名作为回调传入函数
function callItWhatYouWant(err, result) {
if (err) {
throw new Error(err);
} else {
console.log(result);
}
}
// reference the callback function using the function name
doSomeWork(callItWhatYouWant);
Run Code Online (Sandbox Code Playgroud)继续就是下一步。当你调用一个异步函数时,它需要通知你它已经完成。回调作为下一步,即异步函数将在完成后回调您。
所以回调只是一个用于特定目的的函数参数,即延续。
回调应该采用哪些参数没有标准,但在 Node.js 社区中,我们采用了通用签名
function (err, result)
Run Code Online (Sandbox Code Playgroud)
这里err是一个Error对象,如果东西坏事情,或者null如果事情是成功的。如果事情变坏了result一般是undefined,否则它包含结果。所以你的回调通常由任何一个调用
callback(new Error("oops"));
Run Code Online (Sandbox Code Playgroud)
或者
callback(null, result);
Run Code Online (Sandbox Code Playgroud)
另请注意,异步函数的最后一个参数作为回调参数是正常的
function callLater(delay, args, callback) {
setTimeout(function () {
callback(null, args);
}, delay);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |