Type/to search
6
Follow
968
Followers
Beberapa petua untuk mencuba semula enkapsulasi tahan kerosakan
FAQ
Created 2015-07-20 22:01:59  Updated 2015-07-20 22:06:32
 5
 2748

Kesalahan yang disebabkan oleh rangkaian pertukaran akan menyebabkan panggilan fungsi seperti exchange.GetAccount gagal, di mana ia perlu dicuba semula, tetapi kod yang ditunjukkan untuk setiap fungsi yang dicuba semula terlalu rumit, dan ia boleh diselesaikan dengan cara ini:

Fungsi ini diletakkan pada permulaan

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之类好记又短的名子, 这样更方便.
Related Recommendations
Comment
All comments (5)

    请问这个有PY版本吗?

    9 years ago

    function EnsureCall(method) {
    var r;
    while (!(r = method.apply(this, Array.prototype.slice.call(arguments).slice(1)))) {
    Sleep(300);
    }
    return r;
    }
    function main() {
    InitAccount = EnsureCall(exchange.GetAccount());
    Log(InitAccount);
    }

    像上面这种调用,就会出现错误。

    11 years ago

    EnsureCall(exchange.GetAccount) GetAccount后面不用加()

    11 years ago

    我觉得你再做api的时候,把这个容错考虑进去最好。

    11 years ago

    大神测试过了吗?为什么我用的时候,出现这个错误:
    img

    11 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)