【问题标题】:(js) writing async function using a api wrapper(js) 使用 api 包装器编写异步函数
【发布时间】:2020-08-12 05:00:15
【问题描述】:

我目前正在使用https://github.com/pixtron/bybit-api/tree/master

我想要做的看起来像这样:

const {RestClient} = require('@pxtrn/bybit-api');

const API_KEY = 'xxx';
const PRIVATE_KEY = 'yyy';

const client = new RestClient(API_KEY, PRIVATE_KEY);

client.getPosition({symbol: 'BTCUSD'})
  .then(msg => {
    let btcPositionCheck = msg.result.size;
    if (btcPositionCheck == 0) {
      console.log("empty")
    } else {
      let btcPositionSize = btcPositionCheck;
      let btcPositionSide = msg.result.side;
    }
  })
  .catch(err => {
    console.error(err);
  });


client.getPosition({symbol: 'ETHUSD'})
  .then(msg => {
    let ethPositionCheck = msg.result.size;
    if (ethPositionCheck == 0) {
      console.log("empty")
    } else {
      let ethPositionSize = ethPositionCheck;
      let ethPositionSide = msg.result.side;
    }
  })
  .catch(err => {
    console.error(err);
  });

console.log(btcPositionSize + ' ' + ethPositionSize)

返回以下错误:

ReferenceError: btcPositionSize 未定义

只是因为我超出了范围,我知道。但是,我不确定如何重写以下内容以更好地构建我需要的内容。 (我还需要为 3 个不同的资产调用 getPosition,并从每次调用中获取变量,以便稍后在我的代码中使用。)如果这有任何意义。帮助将不胜感激

编辑:

async function getPosition({symbol: BTCUSD}) {
  try {
    let btcPositionCheck = msg.result.size;

  } catch(error) {
    return null;
  }
}


我正在尝试重写它,但我不确定如何

【问题讨论】:

标签: javascript node.js function api asynchronous


【解决方案1】:

一旦您进入异步上下文,您需要留在异步上下文中以获取值。在您的情况下,有要解决的承诺,您可以等待它们然后打印。

您还需要确保您的变量在有效范围内

const {RestClient} = require('@pxtrn/bybit-api');

const API_KEY = 'xxx';
const PRIVATE_KEY = 'yyy';

const client = new RestClient(API_KEY, PRIVATE_KEY);

async function doItAll() {

  let btcPositionCheck;
  let ethPositionCheck;

  await client.getPosition({symbol: 'BTCUSD'})
    .then(msg => {
      btcPositionCheck = msg.result.size;
      if (btcPositionCheck == 0) {
        console.log("empty")
      } else {
        let btcPositionSize = btcPositionCheck;
        let btcPositionSide = msg.result.side;
      }
    })
    .catch(err => {
      console.error(err);
   });


  await client.getPosition({symbol: 'ETHUSD'})
    .then(msg => {
      ethPositionCheck = msg.result.size;
      if (ethPositionCheck == 0) {
        console.log("empty")
      } else {
        let ethPositionSize = ethPositionCheck;
        let ethPositionSide = msg.result.side;
      }
    })
    .catch(err => {
      console.error(err);
    });

    console.log(btcPositionSize + ' ' + ethPositionSize)
}

请注意,更好的方法是将 await 承诺转化为值,这意味着它可以看起来像这样(要使用 await,它需要在异步函数中)

    const msg = await client.getPosition({symbol: 'BTCUSD'})
    btcPositionCheck = msg.result.size;
    if (btcPositionCheck == 0) {
      console.log("empty")
    } else {
      let btcPositionSize = btcPositionCheck;
      let btcPositionSide = msg.result.side;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2021-12-19
    相关资源
    最近更新 更多