У меня есть функция, которая 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) показывает что-то вроде этого: но я знаю, что если 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, ... }