I want to send an http request and return the result using typescript, before send the http request, I want to get the token from google chrome local storage and put the token into http header. This is my typescript code looks like:
api_post:<T>(url: string, data: any): Promise<T> => {
chrome.storage.local.get("token", function (result:any) {
return fetch(url, {
method: 'POST',
headers: {
'Content-type': 'application/json',
'x-access-token': result,
},
body: JSON.stringify(data),
})
.then(response => {
if (!response.ok) {
throw new Error(response.statusText);
}
return response.json() as Promise<T>;
});
});
},
the problem is the promise return from the inner of an async code block, this function shows error:
interface Promise<T>
Represents the completion of an asynchronous operation
A function whose declared type is neither 'void' nor 'any' must return a value.ts(2355)
what should I do to return the promise inside the chrome local storage get and make the code works?
To follow-up on my comment, you could do something like:
api_post: async (url: string, data: any): Promise<T> => {
const { result } = await chrome.storage.local.get("token");
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-type': 'application/json',
'x-access-token': result,
},
body: JSON.stringify(data),
});
return response;
},
Note: This is just to give you an idea of how you could refactor your method using async
/await
. This code will probably require some tweaking.