gpt4 book ai didi

javascript - 我可以在没有 .then 的情况下使用 async await 吗?

转载 作者:行者123 更新时间:2023-11-30 08:24:53 25 4
gpt4 key购买 nike

我对 MDN documentation 有点困惑异步等待。这些文档使用 .then() 语法在 async 函数解析时响应:

mdn 示例

async function add() {
const b = await resolveAfter2Seconds(30); // timer
return b;
}
add().then(v => {
console.log(v);
});

但在我自己的代码中,我不使用 .then() 并且它仍然异步工作。流不阻塞。那么为什么要使用 .then() 呢?

没有 .then 的异步代码

function start(){
console.log("starting!")
let d = loadData()
console.log("this message logs before loadData returns!")
console.log(d) // this shows: Promise - Pending because d has not yet returned
}
async function loadData() {
const response = await fetch("https://swapi.co/api/films/");
const json = await response.json();
console.log("data loaded!")
return json;
}

最佳答案

首先,所有异步函数都会返回一个 Promise,所以如果你想从那个异步操作中获取返回值,你需要使用 thenawait 在异步函数中。

MDN 使用 .then 因为 add 异步函数是在异步函数作用域之外调用的,所以它不能全局使用 await从 promise 中获取数据。

在您的示例中,您得到相同的 Promise 实例作为 loadData 异步函数的返回值,如果您将 start 函数也定义为异步,您可以使用let d = await loadData(),如果不是异步的,可以使用.then(即Promise API)。

关于javascript - 我可以在没有 .then 的情况下使用 async await 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47413296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com