在 mongoose.js 中,每次查询后函数都会返回(错误、结果)。我想编写自己的函数来执行相同的操作。
我认为答案是使用 promise ,所以我写了这个
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并且代码不起作用( promise 永远不会被解决/拒绝)。所以现在我不知道该怎么办。
最佳答案
要从函数中返回错误作为 Promise,通常有两种方法来生成被拒绝的 Promise:
reject
function您的 Promise 库- 在
then
回调中引发异常或从中返回被拒绝的 Promise 将拒绝生成的 Promise
这与为异步函数构建 Promise 具有相同的效果,该异步函数使用错误参数调用其 Node 样式回调。您的代码将被重写为
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")
关于javascript - 如何在 JavaScript 中编写返回错误的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27142657/