控制台日志未在异步函数中等待的承诺中打印
Console log not printing in awaited promise in an async function
function sleep(cb, ms) {
return new Promise((cb) => setTimeout(cb, ms));
}
async function delayedGreeting() {
console.log("Hello");
await sleep(myfun, 1000);
console.log("World!");
}
function myfun() {
console.log("whatever");
}
delayedGreeting();
console.log("Goodbye!");
有人可以在 Eventloop、Callback Queue 和 Stack 的上下文中解释这里发生了什么,因为我在输出中没有看到单词 'whatever'。代码中是否有错误,如果有错误是什么?
你应该这样尝试 -
function sleep(cb, ms) {
return new Promise((resolve) => resolve(setTimeout(cb, ms)));
}
您似乎覆盖了 promise 中的 cb 值。
您忘记在 await sleep(myfun, 1000);
.
这一行为 myfun
函数参数添加括号
演示
function sleep(cb, ms) {
return new Promise((cb) => setTimeout(cb, ms));
}
async function delayedGreeting() {
console.log("Hello");
await sleep(myfun(), 1000);
console.log("World!");
}
function myfun() {
console.log("whatever");
}
delayedGreeting();
console.log("Goodbye!");
代码中有一些小错误。我在下面指出它们。
- 你应该在Promise里写resolve。
return new Promise((resolve) => resolve (setTimeout(()=>{cb()}, ms)));
- 如果要
myfun
到运行超时1000毫秒后,必须调用settimeout第一个参数中的函数。像这样,
setTimeout(()=>{cb()}, ms);
这是更新后的源代码,
function sleep(cb, ms) {
return new Promise((resolve) => resolve (setTimeout(()=>{cb()}, ms)));
}
async function delayedGreeting() {
console.log("Hello");
await sleep(myfun, 1000);
console.log("World!");
}
function myfun() {
console.log("whatever");
}
delayedGreeting();
console.log("Goodbye!");
根据您正在尝试的代码实现的正确输出应该是这样的,
Hello
Goodbye!
World!
whatever
function sleep(cb, ms) {
return new Promise((cb) => setTimeout(cb, ms));
}
async function delayedGreeting() {
console.log("Hello");
await sleep(myfun, 1000);
console.log("World!");
}
function myfun() {
console.log("whatever");
}
delayedGreeting();
console.log("Goodbye!");
有人可以在 Eventloop、Callback Queue 和 Stack 的上下文中解释这里发生了什么,因为我在输出中没有看到单词 'whatever'。代码中是否有错误,如果有错误是什么?
你应该这样尝试 -
function sleep(cb, ms) {
return new Promise((resolve) => resolve(setTimeout(cb, ms)));
}
您似乎覆盖了 promise 中的 cb 值。
您忘记在 await sleep(myfun, 1000);
.
myfun
函数参数添加括号
演示
function sleep(cb, ms) {
return new Promise((cb) => setTimeout(cb, ms));
}
async function delayedGreeting() {
console.log("Hello");
await sleep(myfun(), 1000);
console.log("World!");
}
function myfun() {
console.log("whatever");
}
delayedGreeting();
console.log("Goodbye!");
代码中有一些小错误。我在下面指出它们。
- 你应该在Promise里写resolve。
return new Promise((resolve) => resolve (setTimeout(()=>{cb()}, ms)));
- 如果要
myfun
到运行超时1000毫秒后,必须调用settimeout第一个参数中的函数。像这样,
setTimeout(()=>{cb()}, ms);
这是更新后的源代码,
function sleep(cb, ms) {
return new Promise((resolve) => resolve (setTimeout(()=>{cb()}, ms)));
}
async function delayedGreeting() {
console.log("Hello");
await sleep(myfun, 1000);
console.log("World!");
}
function myfun() {
console.log("whatever");
}
delayedGreeting();
console.log("Goodbye!");
根据您正在尝试的代码实现的正确输出应该是这样的,
Hello
Goodbye!
World!
whatever