我正在做一个非常类似于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,
}
答案 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;
});