TransWikia.com

Почему функция не дожидается завершения работы другой функции NodeJS

Stack Overflow на русском Asked on December 18, 2021

Не могу понять.

Вот есть функция, которая через 5 сек возвращает хеллоу

    function sayHello(){
               setTimeout(() => {
               var data='hello'
               return data;         
            }, 5000)
    }

    module.exports = sayHello;

В другой функции хочу это вывести,

const getHello = require('../DB/remote/methods-api/getPopularProduct') // тут getHello() = sayHello()

 async function viewHello() {
      console.log("await "+ await getHello());
}

но выводит всегда undefined. Пробовал промисами, тоже самое.

One Answer

У вас тут небольшая путаница:

  1. sayHello() через 5 секунд не возвращает 'hello'. Она устанавливает таймаут и тут же возвращает undefined, который и получает функция в импортирующем файле. 'hello' возвращает фукнция, установленная в таймауте, но возвращает его «в пустоту», потому что возвращённое значение нигде не принимается.

  2. Импортируемая функция не возвращает Promise и не является асинхронной, поэтому await перед её вызовом не имеет смысла.

Кажется, то, чего вы пытаетесь добиться, можно реализовать так:

function sayHello() {
  return new Promise((resolve) => {
    setTimeout(() => {
      const data = 'hello';
      resolve(data);
    }, 5000);
  });
}

module.exports = sayHello;
const getHello = require('./module.js');

async function viewHello() {
  console.log("await " + await getHello());
}

viewHello();

Answered by vsemozhebuty on December 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP