Browse Source

use async/await

Gildas 7 years ago
parent
commit
9409ee93ee
1 changed files with 46 additions and 33 deletions
  1. 46 33
      lib/fetch/bg/fetch.js

+ 46 - 33
lib/fetch/bg/fetch.js

@@ -29,50 +29,63 @@
 	let requestId = 1;
 
 	browser.runtime.onMessage.addListener((request, sender, send) => {
+		const sendResponse = response => {
+			if (request.method.startsWith("fetch.")) {
+				fetchResponses.delete(request.requestId);
+			}
+			send(response);
+		};
+		try {
+			onRequest(request, sendResponse);
+		} catch (error) {
+			sendResponse({ error });
+		}
+		return true;
+	});
+
+	async function onRequest(request, sendResponse) {
 		if (request.method) {
 			if (request.method == "fetch") {
 				const responseId = requestId;
-				fetch(request.url, request.options)
-					.then(response => {
-						if (response.status >= 400) {
-							sendResponse({ error: response.statusText || response.status });
-						} else {
-							sendFetchResponse(responseId, response);
-						}
-					})
-					.catch(error => sendResponse({ error: error.toString() }));
 				requestId = requestId + 1;
+				let response;
+				try {
+					response = await fetch(request.url, request.options);
+				} catch (error) {
+					sendResponse({ error });
+				}
+				if (response) {
+					if (response.status >= 400) {
+						sendResponse({ error: new Error(response.statusText || response.status) });
+					} else {
+						fetchResponses.set(responseId, response);
+						const headers = {};
+						for (let headerName of response.headers.keys()) {
+							headers[headerName] = response.headers.get(headerName);
+						}
+						sendResponse({ responseId, headers });
+					}
+				}
 			}
 			if (request.method == "fetch.array") {
 				const content = fetchResponses.get(request.requestId);
-				content.arrayBuffer()
-					.then(buffer => sendResponse({ array: Array.from(new Uint8Array(buffer)) }))
-					.catch(error => sendResponse({ error: error.toString() }));
+				try {
+					const buffer = await content.arrayBuffer();
+					sendResponse({ array: Array.from(new Uint8Array(buffer)) });
+				} catch (error) {
+					sendResponse({ error });
+				}
 			}
 			if (request.method == "fetch.text") {
 				const content = fetchResponses.get(request.requestId);
-				content.text()
-					.then(text => sendResponse({ text }))
-					.catch(error => sendResponse({ error: error.toString() }));
+				try {
+					const text = await content.text();
+					sendResponse({ text });
+				} catch (error) {
+					sendResponse({ error });
+				}
 			}
-			return true;
 		}
-
-		function sendResponse(response) {
-			if (request.method.startsWith("fetch.")) {
-				fetchResponses.delete(request.requestId);
-			}
-			send(response);
-		}
-
-		function sendFetchResponse(responseId, response) {
-			fetchResponses.set(responseId, response);
-			const headers = {};
-			for (let headerName of response.headers.keys()) {
-				headers[headerName] = response.headers.get(headerName);
-			}
-			sendResponse({ responseId, headers });
-		}
-	});
+	}
 
 })();