在NodeJS中导出对象和承诺

时间:2017-12-09 11:22:44

标签: javascript node.js promise

我正在尝试导出一个允许您输入参数(交易对)的函数,它将返回该交易对的数据。这是创建以下函数的代码:

  1. 接受参数(交易对)。
  2. 以Promise的形式返回该交易对的数据。
  3. 然后调用另一个处理该数据的函数。
  4. Function for pulling trading details

    // This function is exported and let's you feed in pairs you want data for - feeling proud.
    function pullData(coinPair) {
      kc.getTicker({
        pair: coinPair
      }).then(returnData).catch(console.error)  
    }
    
    // This function is the callback, which I believe means this function is called and fed the results of the Promise returned from 'kc.getTicker'.
    // At first it just logs the data, but now I'll need to find a way to return the data as a usable array. Maybe use the 'return()' function?
    
    function returnData(pairData) {
      // Nae Nae
      //return pairData;
      console.log(pairData);
    }
    
    //  Finally we export our hard work
    exports.pullData = pullData;
    

    我现在想让导出的函数返回数据(并且这些数据可以被回调函数使用。

    Using the function in another file

    // Including important sub modules & config files
    const tradeData = require('./example');
    var config = require('./config');
    
    // Log the config pairs (Method 1):
    function logArrayElements(element, array) {
        console.log(element);
      }
    
    config.pairs.forEach(logArrayElements);
    
    // Was going to cycle through config pairs. However, I will instead have a base strategy that will be replicated for each pair and run side by side.
    
    //console.log(tradeData.pullData('ETH-USDT'));
    tradeData.pullData('ETH-USDT', calculations);
    
    function calculations() {
        console.log(pairData);
    }
    

    这里的相关行是文件的包含(' ./示例')以及使用该函数的可怜尝试,其中回调较低。

    我的目标是能够传递这样的信息:

    tradeData.pullData('ETH-USDT', calculations);
    
    function calculations() {
        // Calculations and logic here 
    }
    

    这可能涉及到'然后'只需返回数据。我相信这可以进行一次计算'函数在异步函数完成后使用数据...

    我非常感谢任何答案,因为我无法找到关于我应该在这里做什么的指导。

2 个答案:

答案 0 :(得分:1)

我不确定你要回归的是什么pullData。你希望它只返回数据吗?所以像这样:

function pullData(coinPair) {
  return kc.getTicker({
    pair: coinPair
  })
  .catch(console.error)  //.then(returnData)
}

然后您希望收到对此类数据执行的calculations函数:

function pullData(coinPair,calculations) {
  return kc.getTicker({
    pair: coinPair
  }).then(calculations).catch(console.error)  
}

现在来电者可以这样做:

pullData(pair,calculations);

但来电者可能会做得很好:

pullData(par).then(calculations)

我不确定这里有什么好处。

答案 1 :(得分:0)

我的问题可能让其他人感到困惑,因为我真的迷失了正确的结构。

第二天审查后,我的目的是:

  1. 创建一个可以从API请求数据的函数。
  2. 导出此功能并允许在其他文件中调用它。
  3. 允许其他文件在自己的回调中传递,以便执行所需的计算并适当地使用数据。
  4. 在我原来的问题中,我没有将回调定义为数据收集功能的参数。结果,该函数只能期望一个参数,即“对”。我相信它会调用' .then()'一旦异步过程完成。但是,它调用的函数必须在原始文件中。

    为了解决这个问题,我必须添加一个函数,在这种情况下,命名为' calculate',作为函数中的参数,然后有' .then()'叫那个功能。这告诉了' .then()'查找将作为第二个参数传递的函数,然后在从API接收到数据后调用它。

    现在这意味着我可以将该函数导出到多个其他文件中,如果我希望其他函数使用数据,我只需通过调用传递这些函数。