Как записать результат промиса в переменую

Имеем следующий код

let result = async () => {
   return await fs.readFile('header.html', 'utf8');
}; 

при вызове данной функции ожидалось увидеть в консоле содержимое файла "header.html":

console.log(result()); // увы было выведено Promise { <pending> }

Не приговор подумал я, зная что раз функция возвращет промис, нужно применить к нему метод then.

После доработки функции таким образом:

let result = async () => {
   await fs.readFile('header.html', 'utf8')
   .then(res => { return res }); };

снова запустил консоль и к своему удивление обнаружил что:

console.log(result()); // увы снова было выведено Promise { <pending> }

На всякий случай попробовал организовать вывод непосредственно в функции вот так:

let result = async () => {
   await fs.readFile('header.html', 'utf8')
   .then(res => console.log(res)); }; 

и наконец после вызова функции result(); увидел заветное содержимое файла в консоли.

Однако мне не нужно содержимое файла в консоли. Мне нужно записать его в переменную, а этого у меня как я не пытался так и не вышло.

Даже при вызове функции я добавлял метод then к функции:

console.log(result().then(res => { return res })); 

и даже так:

console.log(result().then(res => { return res }).then(res => { return res })); );  

Также объявлял функцию порождающую промис как Function Declaration:

    function prom() {  
    return fs.readFile('header.html', 'utf8')  
      .then(function (data) {  
         return data;  
      });  
    }  

и затем уже используюя промежуточную функцию:

    async function func() {  
      let res = await prom();  
      return res;  
    }  

делал вызов в консоль:

    console.log(func());  

Но снова и снова получал злополучное Promise { <pending> }.

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


Ответы (0 шт):