Issue
I'm new on Typescript
How can I read the function json response from my callback function?
this is my function, it return html content...
async function getContent(src: string) {
try {
const response = await fetch(src);
if (!response.ok) {
throw new Error(`Error! status: ${response.status}`);
}
const result = { content: await response.text(), correlationId: response.headers.get("x-correlationid") };
return result;
} catch (error) {
if (error instanceof Error) {
return error.message;
} else {
return 'An unexpected error occurred';
}
}
}
And this is the way I'm trying to read the json from response. But result.json() is highligthed in red with error "Property json does not exists on type string"
getContent(src)
.then( result => result.json())
.then( post => {
iframe.contentDocument.write(post.content);
})
.catch( error => {
console.log(error);
});
***** UPDATE ******
The problem was inside my getContent function, the catch block must return errors in the same object structure.
function updated
async function getContent(src: string) {
try {
const response = await fetch(src);
if (!response.ok) {
throw new Error(`Error! status: ${response.status}`);
}
const result = { content: await response.text(), correlationId: response.headers.get('x-correlationid') };
return result;
} catch (error) {
if (error instanceof Error) {
return { content: error.message, correlationId: undefined };
} else {
return { content: 'An unexpected error occurred', correlationId: undefined };
}
}
}
and the function call
getContent(src)
.then( result => {
iframe.contentDocument.write(result.content);
console.log(`I have the correlation ${result.correlationId}`);
})
.catch( error => {
console.log(error.content);
});
Solution
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#body
you can see what methods exists out of the box on a the response object the fetch method returns. You are currently using the text
method which extracts the body content as text. You probably want to remove the line in which you are calling json on the response because the write method on the document of the iframe can only consume strings anyway:
getContent(src)
.then( post => {
iframe.contentDocument.write(post.content);
})
.catch( error => {
console.log(error);
});
In a nutshell: the .json method does not exist on the object your getContent
function returns. You can run JSON.parse on the content but as I explained above you should apply the json
method on your response.
Answered By - tabulaR
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.