Почему метод объекта не возвращает значение? - PullRequest
1 голос
/ 17 мая 2019

В следующем коде функция findById() фактически ничего не возвращает. console.log() s запускается и печатается, как и ожидалось, но в результате переменная, к которой вызывается функция, не определена.

Я попытался изменить типы возвращаемых значений, даже просто поставив return true; в конце без каких-либо условий, но он всегда не определен. Чтобы убедиться, что я не пропустил что-то простое, я фактически создал функцию, которая возвращает только значение istrue() Это на самом деле работает нормально.

Это объект / метод def

const database = {
    // List of authenticated characters
    characters: [],
    addCharacter: function(c) {
        this.characters.push(c);
    },
    findById: function(id) {
        console.log('Searching for character...');
        this.characters.forEach((c) => {
            if (c.id === id) {
                console.log('Found');
                console.log('cid: ' + c.id);
                console.log('id: ' + id);
                return true; // Never actually returns
            }
        });
    },
    istrue: function() {
        return true;
    }
};

и где это называется

const find = database.findById(characterIdToFind);
console.log(typeof find); // always undefined
console.log(find); // always undefined

Я ожидаю, что будет какое-то возвращаемое значение хотя бы в одной из перестановок этой функции, которую я пробовал. В возвращаемом значении функции никогда не происходит никаких изменений, просто undefined.

Ответы [ 2 ]

4 голосов
/ 17 мая 2019

Оператор return внутри вложенной функции возвращает функцию.

В этом случае вы можете использовать some() вместо forEach(), потому что вы не можете разбить forEach.

findById: function(id) {
    console.log('Searching for character...');
    return this.characters.some(c => c.id === id)
}

Если вы хотите получить объект, который соответствует заданномуусловие, которое использует find()

findById: function(id) {
    console.log('Searching for character...');
    return this.characters.find(c => c.id === id)
}

Если вы видите выше оба метода, мы возвращаем c.id === id неявно в каждой итерации, но это не return из внешней функции.

2 голосов
/ 17 мая 2019

Это потому, что вы пытаетесь вернуться с forEach & forEach ничего не возвращает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...