我正在学习react native,我遇到了一个问题。为什么从异步函数返回时获取数据会返回一个promise,但在异步函数本身中,它会正确地返回一个对象数组?
在componentDidMount()
上,我调用我的异步函数,该函数反过来提取api url:
componentDidMount() {
let data = this.getData();
console.log(data); // <-- Promise {_40: 0, _65: 0, _55: null, _72: null}
this.setState({
dataSource:this.state.dataSource.cloneWithRows(data),
})
}
async getData() {
const response = await fetch("http://10.0.2.2:3000/users", {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
});
const json = await response.json();
console.log(json); // <-- (5) [Object, Object, Object, Object, Object]
return json;
}
在控制台中。log(json)
,我得到了正确的json对象列表,我可以使用json[0]访问它们。名称
。但后来,控制台。日志(数据)
返回包含奇数数据的promise:
Promise {_40: 0, _65: 0, _55: null, _72: null}
... 我再也找不到我的json对象了。为什么会这样?更重要的是,如何在componentDidMount()
中检索json数据,以便将其设置为数据源
?
或者另一种方式是
async componentDidMount() {
const { data: dataSource = [] } = await this.getData();
this.setState({dataSource})
}
这将复制你的数据到一个不可变的对象,一个重新命名的名称,也设置一个默认值的对象dataSource
另一种类似于提问者原始代码的方法:
async componentDidMount() {
let data = await this.getData();
console.log(data);
this.setState({
dataSource:this.state.dataSource.cloneWithRows(data),
})
}
由于getData()
是一个promise,您应该能够在then
块中获得数据,如下所示:
componentDidMount() {
this.getData()
.then((data) => {
this.setState({
dataSource:this.state.dataSource.cloneWithRows(data),
})
});
}
我试图了解异步/等待如何与promise一起工作。 据我所知,await应该是阻塞的,在上面的代码中,它似乎阻塞了返回带有原语
问题内容: 我的代码: 当我尝试运行这样的东西时: 我越来越: 但为什么? 我的主要目标是将令牌(从令牌中返回承诺)转换为变量。然后才执行一些操作。 问题答案: 只要其结果尚未解决,promise将始终记录未决。无论promise状态如何(已解决或仍处于待处理状态),您都必须调用promise来捕获结果: 这是为什么? 承诺只是向前的方向;您只能解决一次。a的解析值传递给其或方法。 根据Promi
我的代码: 当我尝试运行这样的东西时: 我得到了: 但为什么? 我的主要目标是将返回承诺的中的token转换为一个变量。然后才预形成一些动作。
我有一个异步函数,它调用其中的另一个异步函数。此异步函数正在返回" 你能帮我解决这个问题吗? 以下是第一个异步函数: 如你所见,我调用updateAllProducts函数,并将该值存储到一个变量调用newAllProducts. updateAllProducts是另一个异步函数。 以下是updateAllProducts的代码: 此updateAllProducts函数正在调用另一个异步函数调
问题内容: 就像一个人在这里问到但他的解决方案是调用其他函数 …我想知道是否有可能拥有一个不调用a的函数第二个功能基于异步请求的响应,但仅当异步请求响应时。 可能是这样的: 不调用另一个函数,这有可能吗? 我要实现的目标是拥有一个可以用一些参数调用的函数,该函数将返回异步Web服务(如FB)的响应。 问题答案: 简而言之,没有。您不能让异步函数同步返回有意义的值,因为该值当时不存在(因为它是在后台
问题内容: 有人可以解释一下为什么 this.setState 不是函数吗? 我不明白为什么我的代码有错误 谢谢 问题答案: 这是问题。使用。