我正在尝试创建一个像经典函数一样返回数据的获取函数。像这样:
function fetchGetData(idUser){
fetch('url?idU='+idUser)
.then((response)=>console.log(response))
.then((responseText)=>{
if(responseText.result!='true'){
console.log(responseText)
return parseInt(responseText) // return the data (a number for me)
}
else {
return 0 ;
}
});
}
然后我想使用这样的函数:var data = fetchGetData(id); 我是新的反应,我不知道它是否可能。在我的上下文中,我不能使用状态将其保存在函数中。有任何想法吗? 谢谢
答案 0 :(得分:1)
因为您希望将请求的响应响应为同步函数响应(var data = fetchGetData(id);
)之类的变量,所以在这种情况下使用async/await会更好。
这是您重写的fetchGetData:
async function fetchGetData(idUser){
try {
let response = await fetch('url?idU='+idUser);
console.log(response);
let responseText = await response; // are you sure it's not response.json();?
if(responseText.result!='true'){
console.log(responseText);
return parseInt(responseText) // return the data (a number for me)
} else {
return 0 ;
}
} catch(error) {
console.error(error);
}
}
现在,您可以通过调用函数
来指定它的返回值var data = await fetchGetData(id);
通过这种方式,您使用的是异步操作链接同步操作。
答案 1 :(得分:0)
如果预期响应为JSON
,请将.json()
链response
返回javascript
对象,否则使用.text()
以明文形式返回响应
function fetchGetData(idUser) {
return fetch('url?idU=' + idUser) // note `return` fetch from function call
.then(response => {
return response.text() // if `response` is `JSON` use `.json()` here
})
.then(responseText => {
// if (responseText.result != 'true') { // is expected response `JSON` or text?
console.log(responseText);
return parseInt(responseText) // return the data (a number for me)
// } else {
// return 0;
// }
})
.catch(err => Promise.reject(err))
}
答案 2 :(得分:0)
我遇到了类似的问题..使用_bodyText
属性
function fetchGetData(idUser){
fetch('url?idU='+idUser)
.then((response)=>{console.log(response._bodyText)
return parseInt(response._bodyText)})
);
}