Некоторые советы по перепробованию неправильной упаковки

Автор:Нуль, Создано: 2015-07-20 22:01:59, Обновлено: 2015-07-20 22:06:32

Ошибки, вызванные сетью биржи, могут привести к неудачному вызову функции, такой как exchange.GetAccount, и при этом необходимо повторить попытку, но код, который появляется один раз в каждой функции, слишком запутан, и может быть решен следующим образом:

Это функция, которая начинается.

function EnsureCall(method) {
    var r;
    while (!(r = method.apply(this, Array.prototype.slice.call(arguments).slice(1)))) {
        Sleep(300);
    }
    return r;
}```
然后比如获取账户信息可以这样
```var account = EnsureCall(exchange.GetAccount);```
获取深度可以这样
```var depth = EnsureCall(exchange.GetDepth);```
要传入参数可以这样
```var records = EnsureCall(exchange.GetRecords, PERIOD_M5);```
这样以来,不管交易所网络如何不稳定, EnsureCall会重试得到的都是有效的数据, 不用每个函数都为了容错封装一次了.

当然你也可以把EnsureCall改名为EC或者Call之类好记又短的名子, 这样更方便.

Больше

просто-чуньУ вас есть версия PY?

солорезфункция EnsureCall ((method) { var r; while (!(r = method.apply(this, Array.prototype.slice.call ((arguments).slice))) { Sleep ((300); {y:bi} return r; {y:bi} function main (() { InitAccount = EnsureCall ((exchange.GetAccount))); Log (InitAccount); {y:bi} Подобные вызовы могут привести к ошибкам.

солорезЯ считаю, что лучше в следующий раз, когда ты будешь делать API, учитывать эту ошибку.

солорезПочему, когда я использую, появляется эта ошибка: https://dn-filebox.qbox.me/bdfed9d5bfd320ceaa06732c84ef0dd1662dc3f8.png

Нуль```EnsureCall ((exchange.GetAccount) ``GetAccount не нужно добавлять после))