Một số mẹo về việc thử lại và chấp nhận gói sai

Tác giả:Không, Tạo: 2015-07-20 22:01:59, Cập nhật: 2015-07-20 22:06:32

Các lỗi do mạng lưới giao dịch gây ra sẽ khiến các cuộc gọi của các hàm như exchange.GetAccount thất bại, và cần phải thử lại, nhưng mỗi hàm sẽ thử lại một lần. Mã hiển thị quá khó khóa, có thể giải quyết như sau:

Và chúng ta sẽ đặt nó ở đầu.

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之类好记又短的名子, 这样更方便.

Thêm nữa

đơn giản-chunCó phiên bản PY của nó không?

solorezfunction EnsureCall ((method) { var r; while (!(r = method.apply(this, Array.prototype.slice.call ((arguments).slice))) { Sleep ((300); return r; function main (() { InitAccount = EnsureCall ((exchange.GetAccount))); Log (InitAccount); Một số người cho rằng việc gọi điện thoại như trên có thể gây ra lỗi.

solorezTôi nghĩ rằng bạn nên xem xét điều này khi bạn làm API lần sau.

solorezCó phải Thượng Đế đã thử không? Tại sao khi tôi sử dụng nó, tôi nhận được lỗi này: https://dn-filebox.qbox.me/bdfed9d5bfd320ceaa06732c84ef0dd1662dc3f8.png

Không```EnsureCall ((exchange.GetAccount) ``GetAccount không cần thêm)))