غلط پیکیجنگ کے بارے میں کچھ تجاویز

مصنف:صفر, تخلیق: 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之类好记又短的名子, 这样更方便.

مزید

سادہ-چنکیا اس کا کوئی پی وائی ورژن ہے؟

سولوریزfunction 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 (())); لاگ ان (InitAccount) ؛ } اس طرح کے کالز میں غلطیاں ہوتی ہیں۔

سولوریزمجھے لگتا ہے کہ جب آپ دوبارہ اے پی آئی بنائیں گے تو اس غلطی کو مدنظر رکھنا بہتر ہوگا۔

سولوریزکیا آپ نے یہ ٹیسٹ کیا ہے؟ میں نے یہ کیوں استعمال کیا اور یہ غلطی کیوں ہوئی: https://dn-filebox.qbox.me/bdfed9d5bfd320ceaa06732c84ef0dd1662dc3f8.png

صفر```EnsureCall ((exchange.GetAccount) ``GetAccount کے بعد شامل کرنے کی ضرورت نہیں))