Javascript 如何访问异步获取函数的值?
我想在另一个函数中使用获取的值 我对JS真的很陌生。所以直到现在我才尝试使用这个.setState和函数的返回值Javascript 如何访问异步获取函数的值?,javascript,async-await,fetch,Javascript,Async Await,Fetch,我想在另一个函数中使用获取的值 我对JS真的很陌生。所以直到现在我才尝试使用这个.setState和函数的返回值 async fetchData() { const url = 'http://localhost:8080'; const response = await fetch(url); const data = await response.json(); // stringify JSON var myJSON = JSON.stringif
async fetchData() {
const url = 'http://localhost:8080';
const response = await fetch(url);
const data = await response.json();
// stringify JSON
var myJSON = JSON.stringify(data);
// parsing to JS object
var jsonData = JSON.parse(myJSON);
}
直到现在,我得到了一个状态待定的承诺。如何获取实际值?当您将函数标记为隐式地将其具有的任何返回值封装为承诺时。您实际上并没有返回任何内容,因此fetchData将只返回一个解析为未定义的承诺 因此,首先,您需要从函数中实际返回一些内容:
async fetchData() {
const url = 'http://localhost:8080';
const response = await fetch(url);
const data = await response.json();
return data; // It should already be parsed JSON since you called `response.json()`
}
// You can use async/await
async someOtherFunction() {
const value = await fetchData();
// Do things...
}
// Or use .then
someOtherFunction() {
fetchData().then((value) => {
// Do things...
});
}
然后,您需要等待在调用函数中完成承诺:
async fetchData() {
const url = 'http://localhost:8080';
const response = await fetch(url);
const data = await response.json();
return data; // It should already be parsed JSON since you called `response.json()`
}
// You can use async/await
async someOtherFunction() {
const value = await fetchData();
// Do things...
}
// Or use .then
someOtherFunction() {
fetchData().then((value) => {
// Do things...
});
}
异步函数只能返回承诺。使用fetchData。然后…,或者如果添加返回数据,则等待fetchData。或者直接在那里使用它,在fetchData内部。另外,请注意,数据已经被解析为数据,它后面的最后两行是无用的。数据是一个对象。为什么要将其转换为JSON字符串,然后将其解析回对象?只需使用数据。无论如何,这个函数不返回任何东西,也不调用setState。请将所有相关代码添加到您的问题中。此外,此链接对需要完整文档的任何人都很有用,也许您应该将其添加到您的答案中?好的,也许我不理解此过程,但当我返回SomeOther函数的值时,它会给我相同的承诺-待定情况。我试着在我的组件中调用它。我理解错了吗?@KurgerBing,你需要再次等待它:componentDidMount{fetchData.thenvalue=>this.setState{key:value}}@MatthewHerbst当我在componentDidMount中调用this.state.key时,它是空的,是的,我在构造函数中初始化了它。我真的很困惑。好吧,我明白了!我使用了你的建议,但在等待获取数据之后,我在逻辑中构建了回报,而不是获得回报。现在我可以毫无问题地使用这些值了。再次感谢你的耐心:D