与异步JavaScript代码搏斗
我试图让这个函数异步调用API并返回响应的JSON。但是,在API调用返回并填充与异步JavaScript代码搏斗,javascript,asynchronous,Javascript,Asynchronous,我试图让这个函数异步调用API并返回响应的JSON。但是,在API调用返回并填充res之前,函数不返回任何内容 我对异步JavaScript在这个用例中的正确使用感到困惑 根据我的理解,一旦在函数中声明了async,那么每当遇到await时,代码就会暂停,直到await返回承诺。但情况显然并非如此。我错过了什么 let queryApi = async (query) => { const url = "http://localhost:3
res
之前,函数不返回任何内容
我对异步JavaScript在这个用例中的正确使用感到困惑
根据我的理解,一旦在函数中声明了async
,那么每当遇到await
时,代码就会暂停,直到await
返回承诺。但情况显然并非如此。我错过了什么
let queryApi = async (query) => {
const url = "http://localhost:3000/test";
const response = await fetch(url)
const res = await response.json();
return res;
}
谢谢朋友们 是的,承诺就是这样起作用的。必须从异步设置或顶级模块调用异步代码。假设您有以下代码(已调整)
让queryApi=async(查询)=>{
const response=等待获取(查询);
const res=wait response.json();
返回res;
}
你可以这样称呼它:
let result=wait queryApi('https://www.example.com');
控制台日志(结果);
它必须位于异步函数或
中。在这里,大括号有一些问题。
实际上你需要这样的东西:
const queryApi = async (query) => {
const response = await fetch(query);
const res = await response.json();
return res;
}
尝试在异步函数外部声明您的res
变量。@AbdullahKhan,不,这是不必要的。您在调用站点等待吗?也就是说,const result=wait queryApi(query)
与const result=queryApi(query)
相比,我相当肯定这个问题是由于不正确使用fetch()
造成的。Fetch返回一个承诺,您不能只调用.json()
on.@David,真的吗?代码是同步工作的。是的,我也这么认为,但后来又想到了打字错误?