Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问异步获取函数的值?_Javascript_Async Await_Fetch - Fatal编程技术网

Javascript 如何访问异步获取函数的值?

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

我想在另一个函数中使用获取的值

我对JS真的很陌生。所以直到现在我才尝试使用这个.setState和函数的返回值

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