Шаблон: Как получить доступ к object.properties (правильно) из результата, возвращаемого асинхронной функцией - PullRequest
0 голосов
/ 17 июня 2019

У меня есть функция, которая fetch данных из БД или API указывает и добавляет к ней свойства, например:

async function function_one (arg) {
    try {
        if (arg != number) throw new Error('error')
        let data = await findOne(arg);
        data['property'] = 1+2+3
        ....
        return data //this is an object with it's own properties
    } catch (e) {
        console.log(e); //errorHandling with winston
    }
}

и другую (основную) функцию, которая использует данные из предыдущих функций:

async function Master (user_input) {
    try {
        let object = await function_one(user_input);
        console.log(object.property_one) //weak warning
        let another_object = await another_function (fixed_arg);
        //some other logic with object properties.
        return result_data
    } catch (e) {
        console.log(e);
    }
}

Поэтому, когда я пытаюсь получить доступ к object свойствам в Master, функция выглядит следующим образом:

let object = await function_one(user_input);
console.log(object.property_one)

Моя IDE (WebStrom) показывает что-то вроде этого: enter image description here но я знаю, что если function_one будет выполняться правильно (без блока catch), это свойство будет существовать.И если функция Master не будет работать, пользователь не получит сообщение от function_one.(IDE говорит, что throw исключение перехвачено локально).

Так что же я делаю не так и что мне делать?Обрабатывать каждую асинхронную функцию в Master функции следующим образом:

async function Master (user_input) {
    try {
        let object = await function_one(user_input)
            .then(data => {
                //working with properties here and then return it?
            })
            .catch(error => {//handle it});

или возвращать из function_one все свойства, такие как: return {property_one, property_two, ... }

...