не могу найти, где определено свойство «тогда»

#javascript

Вопрос:

Пытаюсь следить за некоторыми видео для моего класса, но я не могу заставить его запустить, это как-то связано .тогда, но я еще не совсем все это понимаю.

Это и то, и другое .затем часть статической надстройки в менеджере классов

Два видео на случай, если это поможет https://www.youtube.com/watch?v=69TMynpJDg8amp;t=326s
https://www.youtube.com/watch?v=e5XkzrR2Et8amp;t=1s

 class House {
    constructor(name) {
        this.name = name;
        this.rooms = [];
    }

    addRoom(name, area) {
        this.rooms.push(new Room(name, area));
    }

}

class Room {
    constructor(name, area) {
        this.name = name;
        this.area = area;
    }
}

class HouseService {
    static url = 'https://ancient-taiga-31359.herokuapp.com/api/houses';

    static getAllHouses() {
        return $.get(this.url);
    }

    static getHouse(id) {
        return $.get(this.url   `/${id}`);
    }

    static createHouse(house) {
        return $.post(this.url, house);
    }

    static updateHouse(house) {
        return $.ajax({
            url: this.url   `/${house._id}`,
            dataType: 'json',
            data: JSON.stringify(house),
            contentType: 'application/json',
            type: 'PUT'
        })
    }

    static deleteHouse(id) {
        return $.ajax({
            url: this.url   `/${id}`,
            type: 'DELETE'
        });
    }

}

class DOMManager {
    static houses;

    static getAllHouses() {
        HouseService.getAllHouses().then(houses => this.render(houses));
    }

    static createHouse(name) {
        HouseService.createHouse(new House(name))
        .then(() => {
            return HouseService.getAllHouses();
        })
        .then((houses) => this.render(houses));
    }


    static deleteHouse(id) {
        console.log(id)
        HouseService.deleteHouse(id)
        .then(() => {
            return HouseService.getAllHouses();
        })
        .then((houses) => this.render(houses));
    }

    static addRoom(id) {
        for (let house of this.houses) {
            if (house._id == id) {
                house.rooms.push(new Room($(`#${house._id}-room-name`).val(), $(`#${house._id}-room-area`).val()))
                HouseService.updateHouse(house)
//THIS THEN IS THE ISSUE
                    .then(() => {
                        console.log('Hello4'   id)
                        return HouseService.getAllHouses();
                    
                    })
                console.log('Hello5')
                .then((houses) => this.render(houses));
            }
        }
    }

    static deleteRoom(houseId, roomId) {
        for (let house of this.houses) {
            if (house._id == houseId) {
                for (let room of house.rooms) {
                    if (room._id == roomId) {
                        house.rooms.splice(house.room.indexOf(room), 1);
                        HouseService.updateHouse(house)
                        .then(() => {
                            return HouseService.getAllHouses();
                        })
                        .then((houses) => this.render(houses));
                    }
                }
            }
        }
    }

    static render(houses) {
        this.houses = houses;
        $('#app').empty();
        for (let house of houses) {
            $('#app').prepend(
                `<div id="${house._id}" class="card">
                    <div class="card-header">
                        <h2>${house.name}</h2>
                        <button class="btn btn-danger" onclick="DOMManager.deleteHouse('${house._id}')">Delete</button>
                    </div>

                    <div
                        <div class="card">
                            <div class="row">
                                <div class="col-sm">
                                    <input type="text" id="${house._id}-room-name" class="form-control" placeholder="Room Name">
                                </div>
                                <div class="col-sm">
                                <input type="text" id="${house._id}-room-area" class="form-control" placeholder="Room Area">
                                </div>
                            </div>

                            

                            <button id="${house._id}-new-room" onclick="DOMManager.addRoom('${house._id}')" class="btn btn-primary form-control">Add</button>

                        </div>
                    </div>

                </div><br>`

            );

            for (let room of house.rooms) {
                $(`#${house._id}`).find('.card-body').append(
                    `<p>
                        <span id="name-${room._id}"><strong>Name: </strong> ${room.name}</span>
                        <span id="area-${room._id}"><strong>Area: </strong> ${room.area}</span>
                        <button class="btn btn-danger" onclick="DOMManager.deleteRoom('${house._id}', '${room._id}')">Delete Rooms</button>
                        `
                )
            }

        }
    }
}

$('#create-new-house').click(() => {
    DOMManager.createHouse($('#new-house-name').val());
    $('#new-house-name').val('');
});

DOMManager.getAllHouses(); 
 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>House App</title>

    <link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.css">

</head>
<body class="container">

    <div id="new-house" class="jumbotron">
        <h2>New House</h2>
        <input type="text" id="new-house-name" class="form-control"> <br>
        <button id="create-new-house" class="btn btn-primary form-control">Create</button>
    </div>

    <div id="app">

    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="index.js"></script>
    <script src="node_modules/bootstrap/dist/js/bootstrap.bundle.js"></script>

</body>
</html> 

Комментарии:

1. Он исходит от $.ajax() возвращаемого объекта.

2. $.ajax() возвращает Deferred объект jQuery. Этот объект совместим с собственными Promise объектами JavaScript, поэтому он реализует .then() метод.

3. Проблема console.log('Hello5').then((houses) => this.render(houses)); в том, что вы поставили console.log его не в то место, поэтому вы звоните .then по нему.

4. Что делать, если вы используете асинхронность и ожидаете выдачи, то

5. Консоль. журнал действительно казался проблемой, теперь, когда я запускаю код, я даже не получаю ошибки и ничего не делаю. Это должно быть добавление комнаты в дом.