【问题标题】:Callback function - how to know what the argument content is回调函数——如何知道参数内容是什么
【发布时间】:2018-10-19 17:33:14
【问题描述】:

请参阅 React 中的附图,index.js 文件。我正在从 youtube API 检索数据。但是,我不明白代码如何理解“数据”是什么,因为这在我的代码之前从未定义过。

它的结构是否总是将搜索中的数据放在我作为参数的任何东西中,放在下一个函数中?

代码有效,“数据”包含从 API 搜索中检索到的数据。我只是不明白搜索内容如何自动以“数据”(或任何我命名的参数)结束。

谁能解释一下 - 谢谢!

【问题讨论】:

  • 它是 api 返回的任何东西.....它做它的事情并用它做的任何事情调用你的回调。调用函数并传递参数没有什么不同。 function foo(data) {}; foo(12345);
  • 你传入了一个回调函数——在本例中是一个匿名函数。它使用 data 作为形式参数 - 但与所有函数参数一样,实际上调用什么并不重要。 (除了可读性,这显然非常重要。)所以data 将是调用回调时实际传递给回调的任何内容。您必须查看 YTSearch 的文档以了解如何调用它以及参数代表什么。

标签: javascript reactjs callback


【解决方案1】:

YTSearch 可能是库代码,它向远程服务器发出请求,解析 JSON 响应并将其传递到回调中,data 作为第一个参数。如果你好奇,可以在 YTSearch 调用之前添加一个 debugger 语句,然后单步执行该函数,看看它在做什么。

【讨论】:

    【解决方案2】:

    这里的最后一个函数是 YTSearch 的回调函数。 YTSearch 是一个包含 youtube 视频的反应库。您所要做的就是调用 YTSearch(),搜索采用对象形式的参数,包括您的 API 密钥和搜索词。回调函数将用于返回结果,在以下情况下,它可用于设置状态。 所以基本上回调函数是由 YTSearch 方法调用并通过它传递结果。 data 只是一个参数,你可以随意命名它。

    这里是一个简单的例子:

    function callback (data) {
      console.log(data);
    }
    
    function YTSearch(obj,callback) {
      //calculates data internally based on obj - API key and searchString
      //finally passes it through the callback function
      callback(data);
    }
    
    YTSearch({key:'API_KEY',term:'surfboards'},callback);
    

    【讨论】:

      【解决方案3】:

      想象下面是您正在调用的YTSearch 方法(简化)。第二个参数callback 接受一个在YTSearch 末尾调用的函数。

      响应 fromDatabase 作为第一个参数传递给此 callback 函数。

      当您调用 YTSearch 并将您自己的函数作为第二个参数传递时,您会在第一个参数中收到数据(您可以将其命名为 dataresponse 或其他任何名称)。

      function YTSearch(options, callback) {
           // query database for some data based on "options"
           const fromDatabase = {name: 'Tom', age: 29};
           callback(fromDatabase);
      }
      
      YTSearch({name: 'tom'}, function(data) {
          console.log(data);
          // {name: 'Tom', age: 29}
      });
      

      【讨论】:

        猜你喜欢
        • 2011-07-05
        • 2015-09-20
        • 1970-01-01
        • 2017-09-07
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 2022-06-13
        • 2011-06-25
        相关资源
        最近更新 更多