【问题标题】:Why do I need to use a callback is this case为什么我需要使用回调是这种情况
【发布时间】:2019-10-29 18:07:55
【问题描述】:

我正在尝试开发 Coinbase Pro node.js API。

运行时:

const buyParams = {
  price: '100.00', // USD
  size: '1', // BTC
  product_id: 'BTC-USD',
};
authedClient.buy(buyParams, callback);

我有以下错误callback is not defined

所以我试图了解回调是如何工作的。

这里的回调到底是什么?如果我理解得很好,我需要定义回调,它是一个函数,但这个函数的目的是什么?我这是因为我需要等待authedClient 方法的答案?或者这是别的什么?

【问题讨论】:

  • 你在问什么是回调?还是您在问为什么需要定义它?
  • 我在问为什么我需要定义它。
  • 为什么不阅读 API 的文档?
  • 我显然处于“我不知道我不知道什么”的情况,所以我不知道我是否需要假设我现在应该有一些东西,如果有是我应该在文档中找到的一些信息。根据seeIts的回答,我更清楚了。
  • 我不知道你为什么要问我们。我们只需要在文档中查找您必须执行的操作。您是否认为文档在某种程度上误导了您?

标签: javascript node.js coinbase-api


【解决方案1】:

.buy 方法将在完成时调用提供的回调。
您可能想根据结果做一些事情。
这就是你需要回调的原因。

【讨论】:

  • 好的,因为.buy 方法的定义方式,所以我需要在这里回调?所以我需要查看文档以了解.buy 方法的行为,这样我才能建立我的回调对吗?
  • 正确!检查您正在使用的库/方法的文档总是一个好主意。
【解决方案2】:

当任务需要一些时间并且出于以下两个原因之一时,通常会使用回调:“给”您需要很长时间才能产生的值,或者通知您有关事件,通常是“我完成了”。

在 NodeJs 中,使用像 function(error, value){...} 这样的回调是一种常见模式,其中调用函数时会出现错误,如果发生错误 callback(err); 或值 callback(null, result);

在您的情况下,您需要在 API-Doc 中阅读如何以及何时调用回调。提供了哪些论据等。

我在问为什么我需要定义它。

因为buy() 方法的作者认为这个函数的每个用户都希望在这个任务完成时得到通知,并且希望接收这个回调提供的任何值,所以如果你不提供适当的回调函数。这就是他抛出错误的原因。

【讨论】:

    【解决方案3】:

    您应该仔细阅读 API,但在这种情况下,.buy 的第二个参数是您传递给它以在 .buy 运行后执行的函数。

    const buyParams = {
    price: '100.00', // USD
    size: '1', // BTC
    product_id: 'BTC-USD',
    };
    const cb = ()=> {
     console.log('Buy finished!');
    }
    authedClient.buy(buyParams, cb);
    

    您应该阅读 API 文档以了解 cb 的参数。但以简单的方式,它就像代码一样!并在购买完成后 cb 调用并记录“购买完成”;

    欢迎提出更多问题。

    【讨论】:

      【解决方案4】:

      通常,您使用回调函数以便在函数完成工作时调用。但是为什么回调而不是简单地捕获函数的返回结果呢?因为同步事件。

      查看here 和以下代码,以更好地理解异步函数的问题以及为什么javascript程序员使用回调函数来解决它

      function syncFunc() {
         return "finished!";
      }
      
      function asyncFunc() {
        setTimeout(() => {
          return "finished!";
        },1);
      }
      
      function asyncFuncWithCallback(callback) {
        setTimeout(() => {
          callback("finished");
        },1);
      }
      
      console.log(`syncFunc: ${syncFunc()}`);
      console.log(`asyncFunc: ${asyncFunc()}`);
      asyncFuncWithCallback((value) => {
           console.log(`asyncFuncWithCallback: ${value}`);
      });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 2016-08-08
        • 2015-09-12
        • 2016-07-17
        • 1970-01-01
        相关资源
        最近更新 更多