初学者在这里。我需要帮助,以便更好地了解此回调函数

时间:2019-06-30 20:27:30

标签: javascript node.js

因此,我正在学习Promise,并且为了演示Promise,讲师首先从传统的回调示例开始。但是,我对他使用的语法以及似乎从中出现了一些额外参数的语法感到有些困惑。

我要寻找的是一个愚蠢的解释,可以帮助我将头缠在它上面。这些是我的具体问题:

  1. 在下面的代码的第一行,是“回调”和参数吗?它是函数的名称吗?或者是别的什么?

  2. 在第三和第四行,我了解我们要传递的内容(错误或结果),但由于我们未定义两个参数,因此我不了解这两个参数的来源任何地方。程序如何知道这还可以并且不会引发错误?

不过,我不需要了解何时调用该函数,因为我知道,这只是定义我困惑的函数中的一些内容。我认为这可能是使我失望的箭头语法。

我曾尝试反复搜索和重新观看视频,但仍然无法掌握发生的情况。

const doWorkCallback = (callback) => {
    setTimeout(() => {
       // callback('This is my error', undefined)
       callback(undefined, [1, 4, 7])
    }, 2000)
}

doWorkCallback((error, result) => {
    if(error) {
        return console.log(error)
    }

    console.log(result)

})

在此先感谢大家的帮助。

2 个答案:

答案 0 :(得分:6)

  

“回调”是参数吗?

否,它是参数的名称(参数是您传递给函数的参数,参数是用于从函数内部访问该参数的变量)。

  

是函数的名称吗?

种类。您可以使用该标识符来访问变量(/参数),该变量保存您作为参数传递给函数的任何值。在您的情况下,您将一个函数((error, result) => ...)传递给它,因此callback将引用该函数。

  

在第三和第四行,我了解我们要传递的内容(错误或结果),但是由于我们在任何地方都没有定义两个参数,所以我不了解这两个参数的来源。

您确实定义了一个带有两个参数((error, result) => {)的函数。但这无关紧要:您可以将任意数量的参数传递给一个函数,无论它具有多少个参数。如果您传递的参数多于参数,则参数将无处可用:

   alert("used", "ignored");

反之,则不接收参数的参数为​​undefined

  function one(arg1) {  /* arg1 is undefined */ }
  one();
  

我认为这可能是使我失望的箭头语法。

这是一个仅具有常规功能的版本:

 function doWorkCallback(callback) {
    setTimeout(function() {
      // callback('This is my error', undefined);
      callback(undefined, [1, 4, 7]);
    }, 2000);
  }

  doWorkCallback(function (error, result) {
    if(error) {
      return console.log(error);
    }
    console.log(result);
  })

您可以阅读有关CodeburstMDN上的箭头功能的信息。

答案 1 :(得分:1)

1-是的,callback是您的doWorkCallback函数的参数。

2-您正在传递一个函数,而不是两个参数。该函数的确也接收到errorresult的参数。

因此,如果转到doWorkCallback函数,则会看到无论回调是什么,都将被调用,未定义为错误,并且每2秒将[1, 4, 7]作为结果