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,因此如果您想从该异步操作中获取返回值,则需要使用then或await在异步函数中。
MDN 使用.then是因为addasync 函数是在 async 函数范围之外调用的,所以它不能await全局使用来从 promise 中捕获数据。
在您的示例中,您将获得相同的 Promise 实例作为loadData异步函数的返回,如果您将该start函数也定义为异步,则可以使用let d = await loadData(),如果它不是异步的,则可以使用.then(这是Promise API)。
| 归档时间: |
|
| 查看次数: |
3478 次 |
| 最近记录: |