为什么我的函数结束(使用外部库)

问题描述 投票:3回答:2

一些错误处理我需要你的帮助。我正在使用外部库,但不知道错误发生了什么。这是我的代码:

//file name = playground.js    
var ccxt = require("ccxt");
    ccxt.exchanges.map(r => {
      let exchange = new ccxt[r]();
      let ticks = exchange
        .fetchTickers()
        .then(res => {
          console.log(res);
        })
        .catch(e => {
          console.log(e);
        });
    });

要正确执行它,您需要通过npm:ccxt安装外部库:npm i ccxt --save,我收到以下错误:

.../node_modules/ccxt/js/base/Exchange.js:407
        throw new NotSupported (this.id + ' fetchTickers not supported yet')
        ^

Error: _1broker fetchTickers not supported yet
    at _1broker.fetchTickers (.../node_modules/ccxt/js/base/Exchange.js:407:15)
    at ccxt.exchanges.map.r (.../playground.js:41:6)
    at Array.map (<anonymous>)
    at Object.<anonymous> (.../playground.js:38:16)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)

基本上,图书馆帮助我的是:

  • 向不同的服务器发出自动请求
  • 在穿制服的物体中组织反应
  • 处理服务器返回的大多数错误

在我的示例中,返回的错误与服务器不支持我正在使用的功能的事实有关。换句话说:我发出了server1可能能够处理的请求,但是server2还没有能够响应。

代码中的ccxt.exhanges返回由库处理的不同服务器的数组。

问题不在于我得到了错误......我没有从每个服务器获取信息,但是一旦遇到错误我的函数就会停止。 .map循环并没有一路走到尽头......

ccxt publishes some information on Error Handling,但我不知道我能用它做什么(在那个对不起的家伙的诺布)。

我希望我的问题很清楚,而且还没有被问过!

在此先感谢您的帮助!

javascript node.js error-handling try-catch ccxt
2个回答
4
投票

这是一个稍好的版本:

var ccxt = require("ccxt");
ccxt.exchanges.forEach(r => {

    let exchange = new ccxt[r]();

    if (exchange.hasFetchTickers) { // ← the most significant line

        let ticks = exchange
            .fetchTickers()
            .then(res => {
                console.log(res);
            })
            .catch(e => {
                console.log(e);
            });
    }  
});

1
投票

你能否检查一下这是否有效。我用map替换了forEach,因为你要做的就是通过交换数组循环。

//file name = playground.js    
var ccxt = require("ccxt");
ccxt.exchanges.forEach(r => {
  let exchange = new ccxt[r]();

  try {
    let ticks = exchange
    .fetchTickers()
    .then(res => {
      console.log(res);
    })
    .catch(e => {
      console.log(e);
    });
  } catch(err) {
    // PRINT THE err IF NEEDED
    console.log("CONTINUING THE LOOP BECAUSE fetchTickers is not supported");
  }  
});
© www.soinside.com 2019 - 2024. All rights reserved.