(js) 使用 api 包装器编写异步函数
Posted
技术标签:
【中文标题】(js) 使用 api 包装器编写异步函数【英文标题】:(js) writing async function using a api wrapper 【发布时间】: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;
我正在尝试重写它,但我不确定如何
【问题讨论】:
这能回答你的问题吗? How do I return the response from an asynchronous call? 【参考方案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;
【讨论】:
以上是关于(js) 使用 api 包装器编写异步函数的主要内容,如果未能解决你的问题,请参考以下文章
Discord.js - 尝试等待异步进程并允许递归调用包装器
node.js 函数调用顺序,Spotify Web API
node js - 当函数依赖于内部的异步函数时,如何从函数返回值
有没有办法将等待/异步 try/catch 块包装到每个函数?