javascript 如何异步/等待获取响应?

f0brbegy  于 2023-03-28  发布在  Java
关注(0)|答案(3)|浏览(131)

我想使用await将响应保存到一个变量中。我需要将该响应存储在一个变量中,并在下一个代码流中使用它。我不想只在函数大括号内存储和使用变量。在下面的代码中,只编写了一个console.log,但存在许多事件。我不想使用fetch and then。我想使用async/await解决它。但我做的每件事都是错的我做错了什么

尝试1

运行=〉未捕获的语法错误:await仅在异步函数和模块的顶级主体中有效

var resp = await fetch(`https://www.yahoo.com/manifest_desktop_us.json`);  
var jobj = await resp.json();  
var display = jobj.display;  
console.log(display); //I need display value

试试2

Run =〉undefined

async function abc(url) {
  var resp = await fetch(url);
  var jobj = await resp.json();
  return jobj;
}
var url = 'https://www.yahoo.com/manifest_desktop_us.json';
var jobj = abc(url);
//var jobj = async() => await abc(url); //undefined
var display = jobj.display;  
console.log(display); //I need display value
ljsrvy3e

ljsrvy3e1#

你需要移动async函数中与async操作相关的 whole 逻辑。
你可以使用一个匿名的async函数:

(async () => {
    var resp = await fetch(`https://www.yahoo.com/manifest_desktop_us.json`);  
    var jobj = await resp.json();  
    var display = jobj.display;  
    console.log(display);
})();

或者,由于异步函数返回Promise,因此您也可以在then调用中获取值:

async function abc(url) {
  var resp = await fetch(url);
  var jobj = await resp.json();
  return jobj;
}
var url = 'https://www.yahoo.com/manifest_desktop_us.json';
var jobj = abc(url).then((value) => console.log(value));
au9on6nz

au9on6nz2#

您的第一次尝试非常接近于让它工作,错误Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules意味着await只能在异步函数中使用,因此您需要 Package 它

(async function(){
    var resp = await fetch(`https://cors- 
 anywhere.herokuapp.com/https://www.yahoo.com/manifest_desktop_us.json`);  
    var jobj = await resp.json();  
    var display = jobj.display;  
    console.log(display); // logs "standalone" from API
})();

另外,您还需要绕过cors,为了便于演示,我添加了corsURL,但在您的生产应用中,您必须在全局HTTP请求示例中处理,或者拥有自己的后端URL。

9rnv2umw

9rnv2umw3#

您可以使用then

const [data, setData] = useState({})

const getApi = async () => {

const resp = await fetch(`https://www.yahoo.com/manifest_desktop_us.json`)  
return resp

}

getApi().then((resp) => setData(resp.json))

相关问题