Experimenting with storing drafts. Fixed an old scary tfrpc bug which resulted in localStorageGet returning wrong values on subsequent calls.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4138 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
2023-01-21 00:16:18 +00:00
parent 77df158178
commit dab7050899
8 changed files with 84 additions and 50 deletions

View File

@ -22,14 +22,14 @@ App.prototype.readOutput = function(callback) {
App.prototype.makeFunction = function(api) {
let self = this;
let id = g_next_id++;
while (!id || g_calls[id]) {
id = g_next_id++;
}
let promise = new Promise(function(resolve, reject) {
g_calls[id] = {resolve: resolve, reject: reject};
});
let result = function() {
let id = g_next_id++;
while (!id || g_calls[id]) {
id = g_next_id++;
}
let promise = new Promise(function(resolve, reject) {
g_calls[id] = {resolve: resolve, reject: reject};
});
let message = {
message: 'tfrpc',
method: api[0],

View File

@ -387,7 +387,7 @@ function api_localStorageSet(key, value) {
window.localStorage.setItem('app:' + key, value);
}
function api_localStorageGet(key, value) {
function api_localStorageGet(key) {
return window.localStorage.getItem('app:' + key);
}
@ -620,17 +620,19 @@ function _receive_websocket_message(message) {
message.message === 'tfrpc' &&
message.method) {
let api = k_api[message.method];
let id = message.id;
let params = message.params;
if (api) {
Promise.resolve(api.func(...message.params)).then(function(result) {
Promise.resolve(api.func(...params)).then(function(result) {
send({
message: 'tfrpc',
id: message.id,
id: id,
result: result,
});
}).catch(function(error) {
send({
message: 'tfrpc',
id: message.id,
id: id,
error: error,
});
});

View File

@ -14,7 +14,7 @@ if (k_is_browser) {
function make_rpc(target, prop, receiver) {
return function() {
let id = g_next_id++;
while (!id || g_calls[id]) {
while (!id || g_calls[id] !== undefined) {
id = g_next_id++;
}
let promise = new Promise(function(resolve, reject) {
@ -39,38 +39,35 @@ function send(response) {
function call_rpc(message) {
if (message && message.message === 'tfrpc') {
let method = g_api[message.method];
let id = message.id;
if (message.method) {
let method = g_api[message.method];
if (method) {
let response = {message: 'tfrpc', id: message.id};
try {
Promise.resolve(method(...message.params)).then(function(result) {
response.result = result;
send(response);
send({message: 'tfrpc', id: id, result: result});
}).catch(function(error) {
response.error = error;
send(response);
send({message: 'tfrpc', id: id, error: error});
});
} catch (error) {
response.error = error;
send(response);
send({message: 'tfrpc', id: id, error: error});
}
} else {
throw new Error(message.method + ' not found.');
}
} else if (message.error !== undefined) {
if (g_calls[message.id]) {
g_calls[message.id].reject(message.error);
delete g_calls[message.id];
if (g_calls[id]) {
g_calls[id].reject(message.error);
delete g_calls[id];
} else {
throw new Error(message.id + ' not found to reply.');
throw new Error(id + ' not found to reply.');
}
} else {
if (g_calls[message.id]) {
g_calls[message.id].resolve(message.result);
delete g_calls[message.id];
if (g_calls[id]) {
g_calls[id].resolve(message.result);
delete g_calls[id];
} else {
throw new Error(message.id + ' not found to reply.');
throw new Error(id + ' not found to reply.');
}
}
}