如何编写一个在javascript中返回错误的函数

时间:2014-11-26 06:28:46

标签: javascript node.js coffeescript promise

在每次查询后的mongoose.js中,函数返回(错误,结果)。我想写自己的功能也是如此。

我认为答案是使用承诺所以我写了这个

  login: (user) ->
    q.Promise (resolve, reject, notify) ->
      console.log resolve
      if _.has(user, 'password')
        dashboard.users.find(user).exec().then (err, results) ->
          if err then reject("Error occurred with the database")
          if results then resolve(results) else reject("User not found")
      else
        reject("A password is required for login")

Auth.login(testuser).then (d) ->
    console.log d, "done"

但经过研究后我发现这是一个anti pattern并且代码不起作用(承诺永远不会被解决/拒绝)。所以现在我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

要将函数作为promises返回错误,通常有两种方法可以产生被拒绝的承诺:

  • 您的Promise图书馆的reject function
  • then回调中抛出异常或从中返回被拒绝的承诺将拒绝产生的承诺

这与为异步函数构建承诺具有相同的效果,该函数使用error参数调用其节点样式的回调。您的代码将被重写为

  login: (user) ->
    if _.has(user, 'password')
      q(dashboard.users.find(user).exec()).then (results) ->
        if results 
          results
        else
          throw new Error("User not found")
      , (err) ->
        throw new Error("Error occurred with the database")
    else
      q.reject("A password is required for login")