Tips untuk mencuba semula pembungkusan yang salah

Penulis:Sifar, Dicipta: 2015-07-20 22:01:59, Dikemas kini: 2015-07-20 22:06:32

Kesilapan yang disebabkan oleh rangkaian pertukaran boleh menyebabkan panggilan fungsi seperti exchange.GetAccount gagal, di mana ia perlu dicuba semula, tetapi setiap fungsi dicuba semula, tetapi kod yang muncul sekali terlalu rumit, dan boleh diselesaikan seperti 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之类好记又短的名子, 这样更方便.

Lebih lanjut

mudah-chunBoleh saya tanya, adakah versi PY untuk ini?

solorezfungsi EnsureCall ((method) { Var r; while (!(r = method.apply(this, Array.prototype.slice.call ((arguments).slice))) { Sleep ((300); {C:$0000FF} return r; {C:$0000FF} fungsi utama (() { InitAccount = EnsureCall ((exchange.GetAccount))); Log (InitAccount); {C:$0000FF} Jika anda membuat panggilan seperti di atas, anda akan mendapat kesilapan.

solorezSaya rasa lebih baik anda mempertimbangkan kesalahan ini apabila anda membuat api lagi.

solorezAdakah Tuhan telah menguji? Mengapa saya mendapat kesilapan ini apabila saya menggunakannya: https://dn-filebox.qbox.me/bdfed9d5bfd320ceaa06732c84ef0dd1662dc3f8.png

Sifar```EnsureCall ((exchange.GetAccount) ``GetAccount tidak perlu ditambahkan selepas ((()