javascript - 如何在 JavaScript 中编写返回错误的函数

标签 javascript node.js coffeescript promise

在 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/

相关文章:

Javascript Canvas 箭头 - 箭头不指向行尾

javascript - 处理 Orchestrate.io 查询的最佳模式

css - 如何在 Angular 应用程序中使用 SASS/SCSS

powershell - 如何在 PowerShell 中将文件夹中的所有文件作为参数传递?

javascript - 如何为 CoffeeScript 搜索添加时间延迟

javascript - 将下拉列表 Razor 值设置为输入

javascript - 文本区域中的新行在 IE 中不起作用

node.js - NodeJS 基本认证

javascript - rails 4 : display spinner with javascript on form submit

javascript - 导轨 5 : sign_out(:user) on load balanced application