Передать данные из request в переменную Node js [дубликат]

426
23 августа 2017, 19:29

На данный вопрос уже ответили:

  • Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания 3 ответа

Есть простой тектовой файл с одной цифрой внутри, достаем его содержимое с помощью Axios (проект на Node.js, React), в консоль все выводится без проблем, подскажите как записать эту цифру в переменную?

function getValue(filepath) {
let value = null;
    axios.get(filepath)
                    .then(response => {
                        value = response.data;
                        console.log(response.data);
                    })
                    .catch(error => {
                        console.log(error);
                    });
    return value;
}

Что сделать, чтобы функция вернула в value то, что находится в responce.data. Выдает либо unidentified либо пустоту...

Answer 1

Судя по всему, метод axios.get возвращает промис, а значит его выполнение происходит асинхронно. Соответственно, мы не можем просто вернуть его результат в вызвавшей его функции, т.к. на момент завершения работы функции метод может быть ещё не выполнен.

Решение – возвращать промис вместо значения:

function getValue(filepath) {
    return new Promise((resolve, reject) => {
        axios.get(filepath)
            .then(response => {
                resolve(response.data);
                console.log(response.data);
            })
            .catch(error => {
                reject(error);
            });
    });
}

После этого мы можем использовать функцию так:

getValue(path).then(value => {
    //тут переменная value будет доступна и заполнена
}).catch(error => {
    //если произоёдет ошибка при выполнении, она попадёт сюда
});
Answer 2

Все равно undefined

getValueOfFile(filepath) {
let axios = require('axios');
return new Promise((resolve, reject) => {
    axios.get(filepath)
        .then(response => {
            resolve(response.data);
            console.log("Responce data".concat(response.data));
        })
        .catch(error => {
            reject(error);
        });
});
};

this.getValueOfFile(path).then(value => {
                cur_value = value;
                console.log("Value = ".concat(value));
            }).catch(error => {
                //если произоёдет ошибка при выполнении, она попадёт сюда
            });
        console.log("Cur_value = ".concat(cur_value));
        return cur_value;

Выдает в консоли:

Responce data1
Value = 1
Cur_value = undefined
READ ALSO
Выбрать все ссылки на странице с помощью php

Выбрать все ссылки на странице с помощью php

Всем приветЕсть DOM-дерево сайта, в нем есть ссылки на вк - <a href="https://vk

284