Почему функция не дожидается завершения работы другой функции NodeJS
Не могу понять.
Вот есть функция, которая через 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. Пробовал промисами, тоже самое.
Ответы (1 шт):
У вас тут небольшая путаница:
sayHello()через 5 секунд не возвращает'hello'. Она устанавливает таймаут и тут же возвращаетundefined, который и получает функция в импортирующем файле.'hello'возвращает фукнция, установленная в таймауте, но возвращает его «в пустоту», потому что возвращённое значение нигде не принимается.Импортируемая функция не возвращает 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();