react-native fetch()。then()返回对象Object

时间:2019-02-09 12:45:09

标签: javascript react-native promise fetch return-value

我正在做一个非常类似于react-native示例代码的网络请求。

Networking.js

export default class Networking {

  static tryLogin() {

    return fetch('https://exampleserver.com')
    .then((response) => response.json())
    .then((responseJson) => {
      return responseJson;
    })
    .catch((error) => {
      console.error(error);
    });

  }
}

我想检索responseJson并在另一个类中对其进行处理,但是,.then((responseJson)返回的是objectObject而不是我的JSON。我正在使用Networking.tryLogin();

调用此方法

return responseJson替换为alert(responseJson)时,它可以按预期方式工作,因此返回值一定是必需的。

编辑: 做console.log()时,我得到:

 Promise {
   "_40": 0,
   "_55": null,
   "_65": 0,
   "_72": null,
}

2 个答案:

答案 0 :(得分:2)

您将在tryLogin()中返回一个Promise。因此,您需要使用.then()方法访问其值:

Networking.tryLogin().then(response => console.log(response));

除了评论中提出的问题外,如react-native docs所述:

  

网络是天生的异步操作。 Fetch方法将返回一个Promise ,这使得它很容易实现   编写以异步方式工作的代码。

答案 1 :(得分:1)

尝试Promise.all()

我有一个与OP类似的问题,并且发现了this article。有点老,但是可以用!要点是以下代码:

const apiRequest1 = fetch('api.example1.com/search').then(function(response){ 
         return response.json()
});
const apiRequest2 = fetch('api.example2.com/search').then(function(response){
         return response.json()
});
const combinedData = {"apiRequest1":{},"apiRequest2:{}};
Promise.all([apiRequest1,apiRequest2]).then(function(values){
    combinedData["apiRequest1"] = values[0];
    combinedData["apiRequest2"] = values[1];
    return combinedData;
});