如何使用fetch从promise回调中返回return?
问题描述:
我有点难住。我忘记了如何做到这一点。 我有一个叫做ext.get()的函数,它需要一个url的参数。它从url获取响应。 ext.get()函数旨在将响应作为json返回。我不认为它是这样做的。如何使用fetch从promise回调中返回return?
ext.get = (url) => {
let myHeaders = new Headers();
let options = {
method: 'GET',
headers: myHeaders,
mode: 'cors'
};
//fetch get
fetch(url, options).then(response => {
console.log(JSON.stringify(response.json()))
return JSON.stringify(response.json())
});
};
答
如果您需要的响应,JSON - 有效地考虑response.json()
一样response.text().then(txt => JSON.parse(txt))
return fetch(url, options).then(response => response.text());
因此,在全功能会
ext.get = (url) => {
let myHeaders = new Headers();
let options = {
method: 'GET',
headers: myHeaders,
mode: 'cors'
};
return fetch(url, options).then(response => response.text());
};
你AREN这样” t本质上是做JSON.stringify(JSON.parse(json))
...这只是json
不过,我怀疑你想要一个纯醇” JavaScript对象
ext.get = (url) => {
let myHeaders = new Headers();
let options = {
method: 'GET',
headers: myHeaders,
mode: 'cors'
};
return fetch(url, options).then(response => response.json());
};
然后,您可以使用它作为:
ext.get('url').then(result => {
// result is the parsed JSON - i.e. a plan ol' javascript object
});
答
您正在使用fetch
,它是一个异步API。这意味着你的函数也必须是异步的 - 即它必须返回一个Promise
。 (你可以用回调做到这一点,但这是2017年...)
你不能从函数返回JSON,因为函数将在服务器响应可用之前返回。您必须在呼叫代码中使用then
(或await
)返回承诺并进行处理。
这样做的最简单和最好的方法是简单地返回调用后的fetch
调用结果。您不想解析JSON,而是将其作为字符串返回。这就要求response.text()
电话:
ext.get = (url) => {
let myHeaders = new Headers();
let options = {
method: 'GET',
headers: myHeaders,
mode: 'cors'
};
//fetch get
return fetch(url, options).then(response => response.text());
};
而且你的调用代码:
ext.get('http://example.com').then((response) => {
console.log(response); // or whatever
});
或await
:
let response = await ext.get("http://example.com");
'返回读取(...' – Ryan
具体[这个答案](HTTP: //stackoverflow.com/a/30180679/542251) – Liam
注意:'ext.get'不能返回除Promise之外的任何内容 - 如果你想让它工作 –