与异步JavaScript代码搏斗

与异步JavaScript代码搏斗,javascript,asynchronous,Javascript,Asynchronous,我试图让这个函数异步调用API并返回响应的JSON。但是,在API调用返回并填充res之前,函数不返回任何内容 我对异步JavaScript在这个用例中的正确使用感到困惑 根据我的理解,一旦在函数中声明了async,那么每当遇到await时,代码就会暂停,直到await返回承诺。但情况显然并非如此。我错过了什么 let queryApi = async (query) => { const url = "http://localhost:3

我试图让这个函数异步调用API并返回响应的JSON。但是,在API调用返回并填充
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,真的吗?代码是同步工作的。是的,我也这么认为,但后来又想到了打字错误?