forked from cory/tildefriends
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:
@ -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.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user