控制台日志未在异步功能中的等待的promise中打印

  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”一词。代码中是否有错误?如果是,那是什么?

format_88 回答:控制台日志未在异步功能中的等待的promise中打印

您忘记在myfun这行上为await sleep(myfun,1000);函数参数添加括号。

演示

  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!");

,

代码中有一些小错误。我在下面指着他们。

  1. 您应该在Promise中写出决心。
return new Promise((resolve) => resolve (setTimeout(()=>{cb()},ms)));
  1. 如果希望myfun在1000毫秒的超时后运行,则必须在settimeout first参数中调用该函数。像这样
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((resolve) => resolve(setTimeout(cb,ms)));

  }

似乎您正在覆盖promise中的cb值。

本文链接:https://www.f2er.com/2653986.html

大家都在问