
+1
Under review
Как получить данные вне метода SendEx
Vyacheslav Shorin 7 maand geleden
in Bugs and problems
•
bijgewerkt door bradren007 6 maand geleden •
12
IR.GetDevice("SST").SendEx({
Type: "GET",
Url: RequestURL,
Headers: {"Accept": "application/json",},
cbReceiveCode: function(code) {IR.Log(code);}
});
Сервер помимо данных возвращает код ответа code
На основании кода нужно либо продолжить работу либо повторить запрос через 10 минут
Как лучше реализовать?
Customer support service by UserEcho
Добрый день.
Можно создать переменную в доступной области видимости (как вариант - глобальную). Внутри 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 написано что на выходе
успешность
Добрый день.
По этой строке:
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 не возвращает
успешность записи
Выполнение SetVariable ничего не возвращает, даже если пытаться записать в токены, доступные только для чтения. Попытка записи в любом случае происходит. Документацию поправим.
а про метод SendEx в описании тоже неверно написано, метод ничего не возвращает?
В SendEx всегда возвращается false. Если параметры в методе правильные, то успешность true/false вам ничего не даст. Нужно отслеживать и разбирать колбэки.