【发布时间】:2021-01-02 23:14:05
【问题描述】:
我一定是在这里遗漏了一些东西,因为我不明白为什么我的 promise 没有解决。
我把代码归结为这个简单的例子:
...
console.log("before");
const promise = second();
console.log("after");
console.log(promise);
...
async function first() {
const p1 = await axios.get("https://<url>");
console.log("first");
console.log(p1.data);
return (p1);
}
async function second() {
const p2 = await first();
console.log("second");
console.log(p2.data);
return (p2);
};
在控制台中产生这个输出:
before
after
Promise { <pending> }
first
p1.data
second
p2.data
我的理解是 await 会暂停执行,直到它完成,然后再转到下一行,但这显然不会发生。
初始块以 pending promise 结束,然后 async 函数中的 awaited 代码执行而不是暂停。
我缺少什么让我的代码暂停并等到 await 行以 resolved promise 完成后再继续?
【问题讨论】:
-
awaitforsecond() -
async函数总是返回一个最初为Pending的 Promise ...async函数就是这样做的 -
您在没有等待的情况下调用异步函数,这就是它显示 Promise 未决的原因。您需要将 await 放在 second() 之前。
标签: javascript node.js promise async-await