@seasketch/geoprocessing
Version:
Geoprocessing and reporting framework for SeaSketch 2.0
50 lines • 1.75 kB
JavaScript
/**
* Runs task by sending GET request to url with payload and optional flags
* Task can be aborted using caller-provided AbortSignal
*/
export const runTask = async (url, payload, signal, checkCacheOnly, onConnect) => {
const urlInst = new URL(url);
urlInst.searchParams.append("geometryUri", payload.geometryUri);
urlInst.searchParams.append("extraParams", payload.extraParams || "{}");
urlInst.searchParams.append("cacheKey", payload.cacheKey || "");
if (checkCacheOnly) {
urlInst.searchParams.append("checkCacheOnly", "true");
urlInst.searchParams.append("onConnect", "" + onConnect);
}
const response = await fetch(urlInst.toString(), {
signal: signal,
method: "get",
headers: {
"Content-Type": "application/json",
},
});
const task = await response.json();
if (signal.aborted) {
throw new Error("Request aborted");
}
else {
return task;
}
};
/**
* Finishes task by hitting the remote cache, updating the hook with the task result and cleaning up
*/
export const finishTask = async (url, payload, abortController, setState, currServiceName, socket) => {
// Get result using checkCacheOnly flag
const finishedRequest = runTask(url, payload, abortController.signal, true, false);
finishedRequest.then((finishedTask) => {
if (finishedTask.data === undefined) {
return;
}
else if (finishedTask.data) {
setState({
loading: false,
task: finishedTask,
error: finishedTask.error,
});
socket.close(1000, currServiceName);
}
return;
});
};
//# sourceMappingURL=tasks.js.map