use Promises and awaits for fetching data

This commit is contained in:
Mohammed Saud 2019-10-08 20:19:55 +05:30
parent bf82a165ae
commit 93fa7c430e

View File

@ -1,67 +1,70 @@
let rs = require('rswebui');
const rs = require('rswebui');
module.exports = {
sslIds: [],
sslDetails: [],
const Data = {
gpgDetails: {},
refreshIds() {
return rs.rsJsonApiRequest(
'/rsPeers/getFriendList',
{},
data => (this.sslIds = data.sslIds),
);
},
loadSslDetails() {
this.sslDetails = [];
return Promise.all(
this.sslIds.map(sslId =>
rs.rsJsonApiRequest('/rsPeers/getPeerDetails', {sslId}, data =>
this.sslDetails.push(data.det),
),
),
);
},
refreshGpgDetails() {
let details = {};
this.refreshIds()
.then(() => this.loadSslDetails())
.then(() => {
this.sslDetails.map(data => {
let isOnline = false;
rs.rsJsonApiRequest(
'/rsPeers/isOnline',
{sslId: data.id},
stat => (isOnline = stat.retval),
).then(() => {
loc = {
name: data.location,
id: data.id,
lastSeen: data.lastConnect,
isOnline,
gpg_id: data.gpg_id,
};
if (details[data.gpg_id] === undefined) {
details[data.gpg_id] = {
name: data.name,
isSearched: true,
isOnline,
locations: [loc],
};
} else {
details[data.gpg_id].locations.push(loc);
}
details[data.gpg_id].isOnline =
details[data.gpg_id].isOnline || isOnline;
this.gpgDetails = details;
});
});
});
},
refreshGpgDetails,
};
async function refreshIds() {
let sslIds = [];
await rs.rsJsonApiRequest(
'/rsPeers/getFriendList',
{},
data => (sslIds = data.sslIds),
);
return sslIds;
}
async function loadSslDetails() {
let sslDetails = [];
let sslIds = await refreshIds();
await Promise.all(
sslIds.map(sslId =>
rs.rsJsonApiRequest('/rsPeers/getPeerDetails', {sslId}, data =>
sslDetails.push(data.det),
),
),
);
return sslDetails;
}
async function refreshGpgDetails() {
let details = {};
let sslDetails = await loadSslDetails();
await Promise.all(
sslDetails.map(data => {
let isOnline = false;
return rs
.rsJsonApiRequest(
'/rsPeers/isOnline',
{sslId: data.id},
stat => (isOnline = stat.retval),
)
.then(() => {
loc = {
name: data.location,
id: data.id,
lastSeen: data.lastConnect,
isOnline,
gpg_id: data.gpg_id,
};
if (details[data.gpg_id] === undefined) {
details[data.gpg_id] = {
name: data.name,
isSearched: true,
isOnline,
locations: [loc],
};
} else {
details[data.gpg_id].locations.push(loc);
}
details[data.gpg_id].isOnline =
details[data.gpg_id].isOnline || isOnline;
});
}),
);
Data.gpgDetails = details;
}
module.exports = Data;