Создать 2 функции, которые будут взаимодействовать

-Создать функцию getUsers с аргументом name пользователя.

  • В функции есть массив

    Users = [ {id: 1, name: 'Bill'}, {id: 2, name: 'John'}, {id: 3, name: 'Bob'}, {id: 4, name: 'Jenny'} ];

  • Функция getUsers возвращает промис в resolve с объектом найденного пользователя (Например getUsers('Bill') в resolve передаем {id: 1, name: 'Bill'}) если пользователь с таким именем не найден тогда reject('User not found')

-Создать функцию getTodos с аргументом id пользователя и которая возвращает промис в resolve все найденные Todos привязанные к этому пользователю

  • В функции есть массив

    const Todos = [ {uid: 1, title: 'todo1'}, {uid: 2, title: 'todo2'}, {uid: 3, title: 'todo3'}, {uid: 4, title: 'todo4'}, {uid: 1, title: 'todo5'}, {uid: 3, title: 'todo6'}, {uid: 2, title: 'todo7'}, {uid: 2, title: 'todo8'}, {uid: 4, title: 'todo9'}, {uid: 1, title: 'todo10'} ];

-- На первом then getUsers вызываем getTodos в который и передаем id пользователя который получили от промиса getUsers чтобы после получить все Todos привязанные к этому пользователю

  • Вывести результат в консоль (resolve все отфильтрованные Todos или reject User not found) (реализация должна быть промис в котором есть другой возвращаемый промис)

Я не знаю как в then связать эти 2 функции

function getUsers(name) {
        return new Promise(function (res, rej) {
            setTimeout(() => {
                if (name) {
                    const Users = [
                        { id: 1, name: 'Bill' },
                        { id: 2, name: 'John' },
                        { id: 3, name: 'Bob' },
                        { id: 4, name: 'Jenny' }
                    ];
                    res(Users)
                }
                else {
                    rej('Incorrect API key')
                }
            }, 2000)
        })
    }
    function getTodos(id) {
        return new Promise(function (res, rej) {
            setTimeout(() => {
                if (id) {
                    const Todos = [
                        { uid: 1, title: 'todo1' },
                        { uid: 2, title: 'todo2' },
                        { uid: 3, title: 'todo3' },
                        { uid: 4, title: 'todo4' },
                        { uid: 1, title: 'todo5' },
                        { uid: 3, title: 'todo6' },
                        { uid: 2, title: 'todo7' },
                        { uid: 2, title: 'todo8' },
                        { uid: 4, title: 'todo9' },
                        { uid: 1, title: 'todo10' }
                    ];
                    res(Todos)
                }
                else {
                    rej('Incorrect API key')
                }
            }, 2000)
        })
    }
    getUsers(name).then(
        getTodos((id) => { name.id })
    )

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

Автор решения: Oliver Patterson

Такая работа с промисами для меня в первое, было просто интересно попробовать.
Но я такие вопросы не поддерживаю, т.к. вы толком не показали своих попыток, смысл всего этого?

function getUsers(name)
{
    if (!name)
    {
        return Promise.reject('Incorrect API key');
    }

    const Users =
    [
        { id: 1, name: 'Bill' },
        { id: 2, name: 'John' },
        { id: 3, name: 'Bob' },
        { id: 4, name: 'Jenny' }
    ];

    const user = Users.find((user) => user.name == name);

    if (user == undefined)
    {
        return Promise.reject('User not found');
    }
    else
    {
        return Promise.resolve(user);
    }
}

function getTodos(id)
{
    if (!id)
    {
        return Promise.reject('Incorrect API key');
    }

    const Todos =
    [
        { uid: 1, title: 'todo1' },
        { uid: 2, title: 'todo2' },
        { uid: 3, title: 'todo3' },
        { uid: 4, title: 'todo4' },
        { uid: 1, title: 'todo5' },
        { uid: 3, title: 'todo6' },
        { uid: 2, title: 'todo7' },
        { uid: 2, title: 'todo8' },
        { uid: 4, title: 'todo9' },
        { uid: 1, title: 'todo10' }
    ];

    const userTodos = Todos.filter((todo) => todo.uid == id);

    return Promise.resolve(userTodos);
}

getUsers('Bill')
    .then(({id}) =>
    {
        getTodos(id)
            .then((todos) =>
            {
                console.log(todos);
            });
    })
    .catch((message) =>
    {
        console.log(message);
    });

→ Ссылка