6
پر توجہ دیں
792
پیروکار

غلطی کو برداشت کرنے والے انکیپسولیشن کو دوبارہ آزمانے کے بارے میں کچھ نکات

میں تخلیق کیا: 2015-07-20 22:01:59, تازہ کاری: 2015-07-20 22:06:32
comments   5
hits   2423

تبادلے کے نیٹ ورک کی وجہ سے ہونے والی غلطیوں کی وجہ سے مثال کے طور پر تبادلہ.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之类好记又短的名子, 这样更方便.