1 (2019-07-17 14:25:03 отредактировано SAMOKILLER)

Тема: Почему не полностью отрабатывает onTrade()?

Не могу понять, почему то код внутри onTrade иногда прерывается во время исполнения, а иногда исполняется полностью.
Я думал может потому что 50 строк кода многовато для колбэка onTrade() и следующий ответы прерывают функцию, но непонятно почему тогда самый последний, из 3, ответов не обрабатывается полностью.


Вот код:

function OnTrade(trade)
    techLog("=====================OnTrade(): started")
    
    toLog("OnTrade(): recieved:"..tostring(trade).." trade[order_num]="..tostring(trade["order_num"]).." idOrder="..tostring(idOrder))
    techLog("OnTrade(): recieved:"..tostring(trade).." trade[order_num]="..tostring(trade["order_num"]).." idOrder="..tostring(idOrder))
    if tostring(trade["order_num"])==tostring(idOrder) then --Это пришел трейд по нашему ордеру?
        techLog("OnTrade(tradeByRegistredOrder): started")
        --50 строк вырезанного кода
    end
    techLog("=====================OnTrade(): finish")    
end

Вот лог:

07/12/19 15:30:20 =====================OnTrade(): started
07/12/19 15:30:20 OnTrade(): recieved:table: 0701EBE8 trade[order_num]=36210678172 idOrder=36210678172
07/12/19 15:30:20 OnTrade(tradeByRegistredOrder): started
07/12/19 15:30:20 =====================OnTrade(): started
07/12/19 15:30:20 OnTrade(): recieved:table: 0701E878 trade[order_num]=36210678172 idOrder=36210678172
07/12/19 15:30:20 OnTrade(tradeByRegistredOrder): started
07/12/19 15:30:20 =====================OnTrade(): started
07/12/19 15:30:20 OnTrade(): recieved:table: 07012938 trade[order_num]=36210678172 idOrder=36210678172
07/12/19 15:30:20 OnTrade(tradeByRegistredOrder): started

Причем на некоторых трейдах код работает норм и доходит до

=====================OnTrade(): finish

, а на некоторых нет.

2 (2019-07-17 15:40:05 отредактировано kalikazandr)

Re: Почему не полностью отрабатывает onTrade()?

Если внутри колбека у вас ошибка, синтаксиса, например, то исключения не будет, просто на ошибке будет завершена работа функции. Проверьте свои 50 строк кода. И вообще нужно убрать весь код из колбека в main. Тогда вы и поймаете исключение, посмотрите №строки и поправите ошибку.
Вот эту строку измените:
if tostring(trade["order_num"])==tostring(idOrder) then
на:
if trade.order_num == idOrder then

без надобности не нужно применять функции преобразования типов, это долгие функции. idOrder если вы получили в OnOrder, то это число и в OnTrade тоже число, вот и сравнивайте 2 числа.