如何使用ES6 Symbol处理node.js中的新Error()?

时间:2019-02-11 08:12:11

标签: javascript node.js mongodb express

我正在使用ES6 Symbol在node.js中创建一个端点。例子

// ES6符号方法

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;
            }
        };
    }
}

//终点

 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?
 }

1 个答案:

答案 0 :(得分:1)

如果要使用错误处理机制,则不仅需要throw,还需要return错误。引发的错误将成为被拒绝的承诺,然后您可以直接在承诺上使用.catch()或如果在异步函数中使用try/catch来处理错误。这是一个简化的示例:

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()