Javascript 从fetchapi提取JSON

Javascript 从fetchapi提取JSON,javascript,Javascript,我意识到以前也曾回答过类似的问题,但我仍然觉得这是如何运作的非常困惑 据我所知,承诺用于处理asyc请求——这些承诺本质上是发回状态或“承诺”,在某个时候,JSON主体(或其他对象)将被交付 我试图理解的是如何正确处理这些请求,以便在JSON主体准备好解析之前函数不会返回 下面我试图简单地提取键“result”(返回字符串“result”)并将其解析为另一个变量,该变量可以存储,然后在代码中的其他地方使用。不幸的是,我的代码总是返回[Object Promise],而不是提取的JSON。我相信这

我意识到以前也曾回答过类似的问题,但我仍然觉得这是如何运作的非常困惑

据我所知,承诺用于处理asyc请求——这些承诺本质上是发回状态或“承诺”,在某个时候,JSON主体(或其他对象)将被交付

我试图理解的是如何正确处理这些请求,以便在JSON主体准备好解析之前函数不会返回

下面我试图简单地提取键“result”(返回字符串“result”)并将其解析为另一个变量,该变量可以存储,然后在代码中的其他地方使用。不幸的是,我的代码总是返回[Object Promise],而不是提取的JSON。我相信这是因为response.json也是一个承诺。。。然而,我不明白我是如何摆脱“承诺链”并返回一个我实际上可以利用的价值的

谢谢你的建议

async function name() {
    const response = await fetch('https://xxxxx.herokuapp.com/timespent', {});
    const json = await response.json();

    return json.result;
}

let varr = name();
console.log(varr)

因为函数是异步的,所以它总是返回一个承诺。您需要使用“等待结果”

了解有关异步的更多信息

async函数名(){
const response=等待获取('https://mautargets.herokuapp.com/timespent', {});
const json=await response.json();
返回json.result;
}
异步函数结果(){
//只能从异步函数的内部调用await。所以我们需要为await name()调用异步函数
让varr=wait name();
console.log(varr)//成功
}

result()
在示例代码中,
name
函数声明为
async
,因此它返回一个承诺

在该函数体内,您可以正确地处理异步调用,如
fetch
或JSON转换

您现在需要的是使用
wait
等待函数“解析”,或者使用“旧的”then/catch方法。请注意,不能总是在异步函数外部使用wait,因此可能需要对其进行包装

例如:

async函数名(){
const response=等待获取('https://mautargets.herokuapp.com/timespent', {});
const json=await response.json();
返回json.result;
}
//使用诺言,然后
name().then(result=>console.log(result));
//包装等待
(异步函数测试(){
试一试{
log(wait name());
}捕获(错误){
//如果承诺被拒绝,错误就会出现在这里
}

})()
您可以在函数声明中有一个回调,然后使用“.then(…)”并在解析承诺后调用它:

异步函数名(cb){ 常数响应=等待 取('https://mautargets.herokuapp.com/timespent', {}); const json=response.json(); 然后(x=>cb(x)) }
名称(console.log)asyn函数始终返回承诺。所以你必须用then方法来处理它。如果代码中包含return,那么JavaScript会自动将其包装成一个具有该值的已解析承诺nice,包装方面是否可以是匿名函数?(需要名称
test
吗?)是的,可以:)谢谢您的回复。这说明我现在可以在本地访问变量。仍然让我困惑的是,我将如何在全球范围内访问结果?i、 e.如果我执行以下操作:var x=result()-我将再次返回承诺,而不是结果您无法直接访问result()的返回。如果你在处理承诺,你需要了解承诺是如何运作的
var x=result()-I
正在使用result的返回值,这仍然是一个承诺,您还没有得到实际值。你需要了解承诺是如何起作用的。如果要对api的结果执行某些操作,请在异步函数中执行,或者使用
。then()