_C
重试函数,用于接口容错。
_C(pfn)
_C(pfn, ...args)示例
-
对于无参数的函数容错。
javascriptfunction main(){ var ticker = _C(exchange.GetTicker) // 调整_C()函数重试时间间隔为2秒 _CDelay(2000) var depth = _C(exchange.GetDepth) Log(ticker) Log(depth) }pythondef main(): ticker = _C(exchange.GetTicker) _CDelay(2000) depth = _C(exchange.GetDepth) Log(ticker) Log(depth)rustfn main() { let ticker = _C!(exchange.GetTicker(None)); // 调整_C!()宏重试时间间隔为2秒 _CDelay(2000); let depth = _C!(exchange.GetDepth(None)); Log!(ticker); Log!(depth); } -
对于有参数的函数容错。
javascriptfunction main(){ var records = _C(exchange.GetRecords, PERIOD_D1) Log(records) }pythondef main(): records = _C(exchange.GetRecords, PERIOD_D1) Log(records)rustfn main() { let records = _C!(exchange.GetRecords(None, PERIOD_D1, None)); Log!(records); } -
也可以用于自定义函数的容错处理。
javascriptvar test = function(a, b){ var time = new Date().getTime() / 1000 if(time % b == 3){ Log("Condition met!", "#FF0000") return true } Log("Retrying!", "#FF0000") return false } function main(){ var ret = _C(test, 1, 5) Log(ret) }pythonimport time def test(a, b): ts = time.time() if ts % b == 3: Log("Condition met!", "#FF0000") return True Log("Retrying!", "#FF0000") return False def main(): ret = _C(test, 1, 5) Log(ret)rustfn test(a: i64, b: i64) -> Result<bool> { let time = Unix(); if time % b == 3 { Log!("Condition met!", "#FF0000"); return Ok(true); } Log!("Retrying!", "#FF0000"); Err(Error::Api("retry".to_string())) } fn main() { // Rust 中自定义函数返回 Result 类型即可使用 _C! 宏容错,返回 Err 时会重试 let ret = _C!(test(1, 5)); Log!(ret); }
返回值
| 类型 | 描述 |
any | 回调函数执行时的返回值(不会是 |
参数
| 名称 | 类型 | 必填 | 描述 |
pfn | function | 是 | 函数引用,是一个回调函数。 |
arg | string / number / bool / object / array / function / any | 否 | 回调函数的参数,参数 |
参考
备注
_C()函数会一直调用指定函数直到成功返回(参数pfn引用的函数调用时返回null、undefined或false会重试调用pfn,Python中为None或False;返回0、空字符串等其它值不会重试,直接作为结果返回)。
例如_C(exchange.GetTicker)。默认重试间隔为3秒,可以调用_CDelay()函数来设置重试间隔。
例如_CDelay(1000),指改变_C()函数的重试间隔为1秒。
可以但不限于对以下函数做容错处理:
exchange.GetTicker()exchange.GetDepth()exchange.GetTrades()exchange.GetRecords()exchange.GetAccount()exchange.GetOrders()exchange.GetOrder()exchange.GetPositions()
都可以通过_C()函数来调用进行容错。_C()函数不局限于以上列出的函数容错,参数pfn是函数引用并非函数调用,注意是_C(exchange.GetTicker)并不是_C(exchange.GetTicker())。