【发布时间】:2020-02-26 10:50:09
【问题描述】:
尝试使用异步函数从 API 获取值。我需要能够立即访问数组中的值。
componentDidMount() {
var devices = this.props.navigation.state.params.userInfoState.deviceIds
async function call_vstat(device, token) {
try {
let response = await fetch(
'http://app.yatis.io/api/admin/getDeviceStatus?api_access_token=' + token + '&deviceId=' + device,
);
let responseJson = await response.json();
return responseJson;
} catch (error) {
console.error(error);
}
}
var results = []
for (i = 0; i < devices.length; i++) {
var result = call_vstat(devices[i], my_token)
.then( (result) => (results.push(result) ) )
}
console.log(results.length)
console.log(results)
}
【问题讨论】:
-
仔细观察你的数组旁边的小 i 按钮,它象征着你的数组值稍后会被评估。由于异步行为,这一点很明显。
-
如果我需要立即访问数组值,最好的方法是
-
通过循环
devices.length并推送call_vstat(devices[i], my_token)来创建一系列承诺。然后将它们与Promise.all()一起解决。如果这能解决您的问题,请告诉我。 -
Sibasish 提到,这是由于异步行为。一旦 array.length 大于 0,您可以添加检查,然后执行所需的业务逻辑。
-
看看这个Link。易卜拉欣·马里尔的回答