在每次查询后的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并且代码不起作用(承诺永远不会被解决/拒绝)。所以现在我不知道该怎么做。
答案 0 :(得分:0)
要将函数作为promises返回错误,通常有两种方法可以产生被拒绝的承诺:
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")