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

Kok*_*oko 1 javascript asynchronous async-await

我有点困惑的MDN文档async await。这些文档使用.then()语法在async函数解析时做出响应:

mdn 示例

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

但是在我自己的代码中,我不使用.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;
}
Run Code Online (Sandbox Code Playgroud)

小智 5

首先,所有异步函数都返回一个 Promise,因此如果您想从该异步操作中获取返回值,则需要使用thenawait在异步函数中。

MDN 使用.then是因为addasync 函数是在 async 函数范围之外调用的,所以它不能await全局使用来从 promise 中捕获数据。

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