Javascript 为什么fetch返回一个奇怪的整数散列?

Javascript 为什么fetch返回一个奇怪的整数散列?,javascript,react-native,fetch-api,Javascript,React Native,Fetch Api,我正在对React Native使用fetchAPI 我的响应遵循正常格式{“message”:“error here”}如果状态>=400,我将在本机弹出窗口中显示 在检测到故障后,我试图调用response.json(),但它总是以一种奇怪的格式处理所有内容 {{u 45:0,{u 81:0,{u 65:null,{u 54:null} 不管什么原因。。。我想要的实际响应位于\u 65。。。我不知道这些随机键是什么 因此,目前我必须通过\u bodyText访问它,但我认为这是错误的,因为它

我正在对React Native使用
fetch
API

我的响应遵循正常格式
{“message”:“error here”}
如果状态>=400,我将在本机弹出窗口中显示

在检测到故障后,我试图调用
response.json()
,但它总是以一种奇怪的格式处理所有内容

{{u 45:0,{u 81:0,{u 65:null,{u 54:null}

不管什么原因。。。我想要的实际响应位于
\u 65
。。。我不知道这些随机键是什么

因此,目前我必须通过
\u 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);
    }
  };

})();
var-API=(函数(){
var base=https://example.com/api/v1';
var默认值={
凭据:“相同来源”,
标题:{
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”
}
};
var alertFailure=功能(响应){
如果(response.status>=200&&response.status<400){
返回响应;
}否则{
var json=json.parse(response._bodyText | |'{}');
var message=json.message | |“出现问题。请关闭应用程序,稍后再试。”;
var错误=新错误(消息);
error.response=响应;
投掷误差;
}
};
var callAPI=函数(url,opts){
opts.headers['X-Version']='v'+Package.Version;
返回获取(基本+url,选项)
。然后(警报失败)
。然后((响应)=>{
返回response.json();
})
.catch((错误)=>{
Alert.Alert(null,error.message);
});
};
返回{
获取:函数(url、选项){
var fullOpts=Object.assign({},默认值,opts);
返回callAPI(url,fullOpts);
},
post:函数(url、数据、选项){
var fullOpts=Object.assign({},默认值{
方法:“POST”,
正文:JSON.stringify(数据|{})
},opts);
返回callAPI(url,fullOpts);
}
};
})();

答案是
.json()
返回一个承诺。。。因此,我必须从
内部执行所有操作。然后()
AsyncStorage.getItems始终返回一个承诺。您可以在下面使用此方法

 AsyncStorage.getItem("access_key").then((value)=>
               {
                    console.log(value);
               });

我建议您使用新的ES7语法
async/await
,它们比使用
更容易理解

要使用它,只需声明一些带有异步前缀的方法,并在其内部使用wait等待调用完成

例如


我希望这会有所帮助,至少在我看来,我发现这比使用.then()更容易,尤其是当您必须在同一个方法中执行多个调用时。

这对于
asyncstorage
也是一样的,因为
async
wait
遇到了同样的问题。仍在努力解决。我在这里添加了我的问题
async someMethod(){
    result =  await fetch(URL); // Do some request to any API.
    // Use the result after that knowing that you'll have it completed. 
}