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;
}
Và sau đó lấy thông tin tài khoản như thế này.var account = EnsureCall(exchange.GetAccount);Có thể làm như vậy.var depth = EnsureCall(exchange.GetDepth);Và chúng ta có thể sử dụng các phương thức như thế này để nhập các tham số.var records = EnsureCall(exchange.GetRecords, PERIOD_M5);Sau đó, bất kể mạng lưới sàn giao dịch có bất ổn như thế nào, EnsureCall sẽ thử lại dữ liệu có hiệu quả, thay vì sử dụng mỗi hàm để gói lại một lần.

Tất nhiên, bạn cũng có thể đổi tên EnsureCall thành EC hoặc Call, những cái tên ngắn và dễ nhớ, vì điều này sẽ dễ dàng hơn.


Nhiều hơn 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)))