У меня возникла довольно нестандартная задача(как обычно, впрочем) вызывать модуль и сохранять его состояние, чтобы в другом потоке его потом вызвать с восстановленным состоянием.
Зачем мне это надо:
В основном потоке я регистрирую аккаунт, в процессе регистрации я выясняю что мне нужно. Уже после получения номера от сервиса я проверяю, нужен ли мне этот номер или нет.
Проверка должна происходить в отдельном браузере, поэтому я стартую новый поток, получаю номер, проверяю его подходит ли он мне, если нет, получаю еще раз новый и так далее.
Как я получу подходящий номер, я не подходящие отменяю и возвращаю из потока подходящий номер.
В основном потоке я продолжаю регистрацию аккаунта и мне нужно получить номер OTP, для чего мне и нужно восстановить состояние объекта _SMS, так как это другой поток и объект _SMS не имеет никакой информации.
Что я пробовал:
- получал номер, проверял его, сохранял состояние объекта(сериализация) _SMS с помощью _JSON.stringify():
log(JSON.stringify(_SMS.confirmData))
log(JSON.stringify(_SMS.apiData))
// Variable holding the name of the property to update
// уникальный ключ состояния объекта, в будущем объект
// должен быть восстановлен по этому ключу
var propertyName = [[STATE_IDENTIFIER]];
// Step 1: Retrieve the object using the P function
var jsonString = P("basglobal", "_SMS_OBJECT_STATE");
// Step 2: Parse the JSON string to get the object
// If the object doesn't exist yet, default to an empty object
var obj = jsonString ? JSON.parse(jsonString) : {};
// Step 3: Update the desired property of the object
obj[propertyName] = {confirmData: _SMS.confirmData, apiData: _SMS.apiData};
// Step 4: Convert the updated object back to a JSON string
var updatedJsonString = JSON.stringify(obj);
// Step 5: Save the updated object using the PSet function
PSet("basglobal", "_SMS_OBJECT_STATE", updatedJsonString);
// clean first
_SMS.apiData = {};
_SMS.confirmData = {};
_SMS.debug = false;
// Variable holding the name of the property to restore
var propertyName = [[STATE_IDENTIFIER]];
// Step 1: Retrieve the saved JSON string using the P function
var jsonString = P("basglobal", "_SMS_OBJECT_STATE");
var savedObj = jsonString ? JSON.parse(jsonString) : {};
var obj = savedObj[propertyName];
_SMS.apiData = obj.apiData;
_SMS.confirmData = obj.confirmData;
_SMS.debug = obj.debug;
log([[LOG_PREFIX]]+ " state restored, _SMS.confirmData: " + JSON.stringify(_SMS.confirmData) + "; _SMS.apiData: " + JSON.stringify(_SMS.apiData));
Ожидаемо это не сработало, так как ограничения сериализатора JSON.stringify/JSON.parse.
Ищу пути, как по другому сохранять и восстанавливать состояние объекта _SMS.
Было бы очень удобно, если были бы функции saveState(сериализованные данные состоянии объекта) и restoreState(десерилизация).