Журнал консоли не печатает в ожидаемом обещании в функции asyn c - PullRequest
0 голосов
/ 13 марта 2020

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

Может кто-нибудь объяснить в контексте Eventl oop, Callback Queue и Stack, что происходит здесь, так как я не вижу слова «что бы то ни было» в выход. Есть ли ошибка в коде и если да, то что это?

Ответы [ 3 ]

1 голос
/ 13 марта 2020

Вы забыли добавить скобки для myfun параметра функции в этой строке await sleep(myfun, 1000);.

DEMO

  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 голос
/ 13 марта 2020

В коде есть небольшие ошибки. Я указываю их ниже.

  1. Вы должны написать решение в Обещании.
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
0 голосов
/ 13 марта 2020

Вы должны попробовать вот так -

function sleep(cb, ms) {
    return new Promise((resolve) => resolve(setTimeout(cb, ms)));

  }

Кажется, вы переопределяете значение cb внутри обещания.

...