@rcsb/rcsb-saguaro-app
Version:
RCSB 1D Saguaro Web App
66 lines • 3.29 kB
JavaScript
import { asyncScheduler } from "rxjs";
import resource from "../../RcsbServerConfig/web.resources.json";
export class NcbiGenomeSequenceData {
static update(ncbiId, strand, reverse, trackWidth) {
let process = null;
return (where) => {
if (process)
process.unsubscribe();
return new Promise((resolve, reject) => {
const delta = trackWidth ? trackWidth / (where.to - where.from) : 1000 / (where.to - where.from);
if (delta > 4) {
let N = 0;
const timeout = 5000;
const getGenomeSequence = () => {
const Http = new XMLHttpRequest();
Http.timeout = timeout;
const url = NcbiGenomeSequenceData.urlPrefix + 'id=' + ncbiId + '&from=' + where.from + '&to=' + where.to + '&strand=' + strand + NcbiGenomeSequenceData.urlSuffix;
Http.open("GET", url);
Http.send();
Http.onloadend = (e) => {
const sequence = Http.responseText.split("\n").slice(1).join("");
if (sequence.length < 1) {
N++;
console.warn("HTTP error while access URL: " + url + " - empty sequence - " + N);
if (N < 4) {
process = asyncScheduler.schedule(() => {
getGenomeSequence();
}, timeout);
}
else {
reject("HTTP error while access URL: " + url + " - No more attempts after " + N);
}
}
else {
const selectedOption = [{
begin: where.from,
label: reverse ? sequence.split("").reverse().join("") : sequence
}];
resolve(selectedOption);
}
};
Http.onerror = (e) => {
N++;
console.warn("HTTP error while access URL: " + url + " - " + N);
if (N < 4) {
process = asyncScheduler.schedule(() => {
getGenomeSequence();
}, timeout);
}
else {
reject("HTTP error while access URL: " + url + " - No more attempts after " + N);
}
};
};
getGenomeSequence();
}
else {
resolve([]);
}
});
};
}
}
NcbiGenomeSequenceData.urlPrefix = resource.ncbi_genome_sequence.url;
NcbiGenomeSequenceData.urlSuffix = resource.ncbi_genome_sequence.url_suffix;
//# sourceMappingURL=NcbiGenomeSequenceData.js.map