0
Under review

Как получить данные вне метода SendEx

Vyacheslav Shorin 3 months ago in Bugs and problems • updated by bradren007 4 weeks ago 12

IR.GetDevice("SST").SendEx({
Type: "GET",
Url: RequestURL,
Headers: {"Accept": "application/json",},
cbReceiveCode: function(code) {IR.Log(code);}
});

Сервер помимо данных  возвращает код ответа code

На основании кода нужно либо продолжить работу либо повторить запрос через 10 минут
Как лучше реализовать?

Under review

Добрый день.

Можно создать переменную в доступной области видимости (как вариант - глобальную). Внутри SendEx сохраняйте новое значение в эту переменную. Отдельной функцией через SetInterval можно обращаться к полученному значению, обнуляя переменную по завершении работы с ней.

IR.AddListener(IR.EVENT_ITEM_PRESS, IR.GetItem("Page 1").GetItem("Item 1"), function()
{
authSST();
var status;
IR.GetDevice("SST").SendEx({
Type: "GET",
Url: RequestURL,
Headers: {
"Accept": "application/json",
},
cbReceiveText: function(text, code, headers) {
IR.Log("cbReceiveText "+text);
var MyData = JSON.Parse(text);
IR.Log("данные " + MyData[0].power + " код " + code);
status = code;
}
});
IR.Log("данные код " + status);
});

Не получается

[07-05-2019 16:21:11.718] INFO SCRIPT данные код undefined

[07-05-2019 16:22:14.694] INFO SCRIPT данные  726 код 200

ответ от сервера приходит позже чем присвоение глобальной переменной кода

В хелпе SendEx  написано что на выходе  

type: Boolean
успешность
запрос проходит но на выходе возвращает FALSE как мне кажется

Добрый день.

По этой строке:

IR.Log("данные " + MyData[0].power + " код " + code);

Что выводится?

вот я написал для контроля

[07-05-2019 16:21:11.718] INFO SCRIPT данные код undefined

[07-05-2019 16:22:14.694] INFO SCRIPT данные 726 код 200
по времени видно, IR.Log("данные " + MyData[0].power + " код " + code); срабатывает позже


Можно добавить условие. Если code != undefined, то сохранять значение.

Если задержка постоянна, то можно опытным путём выбрать оптимальный таймаут и сохранять значение через SetTimeout.

Про задержку решение понятно, но слишком много факторов, интернет, время ответа сервера и его загрузка
Я потом записываю данные в тег сервера, если попробовать такой вариант

IR.SetVartiable("teg", MyData[0].power) если MyData[0].power = undefined вернет false я могу повторить запрос через 5 минут 
Так сработает? IR.SetVartiable вернет false?

Надо смотреть, что реально приходит. Там может быть null. А вот code у вас undefined или число. Может его проще отслеживать?

в описании к SetVariable написано на выходе
но реально не так, попробовал, значение записывает, но true не возвращает

успешностьtruetype: boolean
успешность записи

Выполнение SetVariable ничего не возвращает, даже если пытаться записать в токены, доступные только для чтения. Попытка записи в любом случае происходит. Документацию поправим.

а про метод SendEx в описании тоже неверно написано, метод ничего не возвращает?

В SendEx всегда возвращается false. Если параметры в методе правильные, то успешность true/false вам ничего не даст. Нужно отслеживать и разбирать колбэки.