UNPKG

@rcsb/rcsb-saguaro-app

Version:
66 lines 3.29 kB
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