Как записать результат промиса в переменую
Имеем следующий код
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> }.
Как же всё таки записать данные в переменную ведь делаю всё согласно теории, или может быть я чего-то не допонимаю?