javascript - javascript 回调只是作为函数调用中的参数发送的匿名函数吗?

标签 javascript

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)
    

    哪里errError如果发生了不好的事情,则反对,或者 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/

    相关文章:

    javascript - 如何从列表项中添加和删除类?

    javascript - 嵌套 forEach : Uncaught TypeError: data. forEach 不是函数

    javascript - 尾随零应该自动出现在 之前/之后。 (观点)

    javascript - 错误: Cannot find module 'mkdirp' when pushing nodejs application onto heroku

    javascript - 如何在 Angular 6 构建期间有条件地导入不同的文件?

    javascript - HighCharts 基于时间的季度数据 - xAxis 标签问题

    javascript - 如何使用 Knockout JS 添加类?

    javascript - 如何检查元素在 Javascript 中是否有子元素?

    javascript - 如何在同一个闭包中使用多个 grunt 任务?

    javascript - 如何将数组索引拆分为该特定索引的 2 个索引