krbalaji
krbalaji

Reputation: 474

how to handle new Error() in node.js using ES6 Symbol?

I am creating a endpoint in node.js using ES6 Symbol. Example

// ES6 Symbol Method

const taskCreationMethod = {
    [Symbol.taskMethod]() {
        return {
            storeCheckFunc: async function(storeId, employeeId) {
                let store = await resourceModel["stores"].findById(storeId).populate(references["stores"]);
                if(!store) {
                    return new Error("Store not found");
                }
                let employeeCheck = _.find(store.employees, (empObj) => {
                    return empObj._id == employeeId
                })
                if(!employeeCheck) {
                    return new Error("Employee not found");
                }
                return employeeCheck;
            }
        };
    }
}

//end point

 export const taskCreation = async(req, res) => {
            const storeCheck = await taskCreationMethod[Symbol.taskMethod]().storeCheckFunc(req.body.store, req.body.assigned_to);
      // here How can I handle return with Error Response?
 }

Upvotes: 0

Views: 236

Answers (1)

Mark
Mark

Reputation: 92440

You need to throw that error not just return it if you want to use the mechanisms of error handling. The thrown error will become a rejected promise which you can then handle with .catch() directly on the promise or with try/catch if you are using it in an async function. Here's a simplified example:

function populate() {
  // always resolves to undefined
  return Promise.resolve(undefined)
}

const taskCreationMethod = {
  someMethod() {
    return {
      storeCheckFunc: async function() {
        let store = await populate()          // always resolves undefined
        if (!store) {                         // so it always fails
          throw new Error("Store not found"); // throw error
        }
      }
    };
  }
}

// regular promise then().catch()
taskCreationMethod.someMethod().storeCheckFunc()
  .then(res => console.log(res))
  .catch(err => console.log("Error:", err.message)) // catch

// OR … async function
async function runit() {
  try {
    let s = await taskCreationMethod.someMethod().storeCheckFunc()
  } catch (err) {
    console.log("Error:", err.message)
  }
}

runit()

Upvotes: 1

Related Questions