为什么 fetch return 是一个奇怪的整数散列?
Why does fetch return a weird hash of integers?
我正在使用 fetch
API 和 React Native。
如果状态 >= 400,我的回复将遵循 {"message": "error here"}
的正常格式,我将在本机弹出窗口中显示。
我在检测到故障后尝试调用 response.json()
,但它一直以奇怪的格式放置所有内容...
{ _45: 0, _81: 0, _65: null, _54: null }
无论出于何种原因...我想要的实际响应位于 _65
...我不知道这些随机密钥是什么。
所以目前我必须通过 _bodyText
访问它,但我认为这是错误的,因为它是一个私有下划线方法。
我做错了什么?
var API = (function() {
var base = 'https://example.com/api/v1';
var defaults = {
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
};
var alertFailure = function(response) {
if (response.status >= 200 && response.status < 400) {
return response;
} else {
var json = JSON.parse(response._bodyText || '{}');
var message = json.message || 'There was a problem. Close the app, and try again later.';
var error = new Error(message);
error.response = response;
throw error;
}
};
var callAPI = function(url, opts) {
opts.headers['X-Version'] = 'v' + Package.version;
return fetch(base + url, opts)
.then(alertFailure)
.then((response) => {
return response.json();
})
.catch((error) => {
Alert.alert(null, error.message);
});
};
return {
get: function(url, opts) {
var fullOpts = Object.assign({}, defaults, opts);
return callAPI(url, fullOpts);
},
post: function(url, data, opts) {
var fullOpts = Object.assign({}, defaults, {
method: 'POST',
body: JSON.stringify(data || {})
}, opts);
return callAPI(url, fullOpts);
}
};
})();
答案是 .json()
returns 一个承诺...所以我必须在 .then()
内部做所有事情
AsyncStorage.getItems总是returns一个承诺。您可以使用下面的方法
AsyncStorage.getItem("access_key").then((value)=>
{
console.log(value);
});
我建议您使用新的 ES7 语法 async/await
,它们比使用 .then()
更容易理解
要使用它,只需声明一些带有 async 前缀的方法,并在其中使用 await 等待调用完成。
例如
async someMethod(){
result = await fetch(URL); // Do some request to any API.
// Use the result after that knowing that you'll have it completed.
}
我希望这会有所帮助,至少在我看来,我发现这比使用 .then() 更容易,尤其是当您必须在同一个方法中进行多次调用时。
我正在使用 fetch
API 和 React Native。
如果状态 >= 400,我的回复将遵循 {"message": "error here"}
的正常格式,我将在本机弹出窗口中显示。
我在检测到故障后尝试调用 response.json()
,但它一直以奇怪的格式放置所有内容...
{ _45: 0, _81: 0, _65: null, _54: null }
无论出于何种原因...我想要的实际响应位于 _65
...我不知道这些随机密钥是什么。
所以目前我必须通过 _bodyText
访问它,但我认为这是错误的,因为它是一个私有下划线方法。
我做错了什么?
var API = (function() {
var base = 'https://example.com/api/v1';
var defaults = {
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
};
var alertFailure = function(response) {
if (response.status >= 200 && response.status < 400) {
return response;
} else {
var json = JSON.parse(response._bodyText || '{}');
var message = json.message || 'There was a problem. Close the app, and try again later.';
var error = new Error(message);
error.response = response;
throw error;
}
};
var callAPI = function(url, opts) {
opts.headers['X-Version'] = 'v' + Package.version;
return fetch(base + url, opts)
.then(alertFailure)
.then((response) => {
return response.json();
})
.catch((error) => {
Alert.alert(null, error.message);
});
};
return {
get: function(url, opts) {
var fullOpts = Object.assign({}, defaults, opts);
return callAPI(url, fullOpts);
},
post: function(url, data, opts) {
var fullOpts = Object.assign({}, defaults, {
method: 'POST',
body: JSON.stringify(data || {})
}, opts);
return callAPI(url, fullOpts);
}
};
})();
答案是 .json()
returns 一个承诺...所以我必须在 .then()
AsyncStorage.getItems总是returns一个承诺。您可以使用下面的方法
AsyncStorage.getItem("access_key").then((value)=>
{
console.log(value);
});
我建议您使用新的 ES7 语法 async/await
,它们比使用 .then()
要使用它,只需声明一些带有 async 前缀的方法,并在其中使用 await 等待调用完成。
例如
async someMethod(){
result = await fetch(URL); // Do some request to any API.
// Use the result after that knowing that you'll have it completed.
}
我希望这会有所帮助,至少在我看来,我发现这比使用 .then() 更容易,尤其是当您必须在同一个方法中进行多次调用时。