当前位置: 首页 > 面试题库 >

使用Promises时,每个then()应该返回一个值或抛出

殷永嘉
2023-03-14
问题内容

从请求返回之前,我有一些异步方法需要等待完成。我正在使用Promises,但我不断收到错误消息:

Each then() should return a value or throw // promise/always-return

为什么这令人高兴?这是我的代码

router.get('/account', function(req, res) {
  var id = req.user.uid
  var myProfile = {}
  var profilePromise = new Promise(function(resolve, reject) {
    var userRef = firebase.db.collection('users').doc(id)
    userRef.get()
      .then(doc => { // Error occurs on this line
        if (doc.exists) {
          var profile = doc.data()
          profile.id = doc.id
          myProfile = profile
          resolve()
        } else {
          reject(Error("Profile doesn't exist"))
        }
      })
      .catch(error => {
        reject(error)
      })
  })
  // More promises further on, which I wait for
})

问题答案:

只要避免Promise构造函数反模式-promise-construction-antipattern-and-how-to-avoid-
it)!如果您不调用resolve而是返回一个值,那么您将需要进行一些操作return。该then方法应该用于链接:

outer.get('/account', function(req, res) {
  var id = req.user.uid
  var userRef = firebase.db.collection('users').doc(id)
  var profilePromise = userRef.get().then(doc => {
    if (doc.exists) {
      var profile = doc.data()
      profile.id = doc.id
      return profile // I assume you don't want to return undefined
//    ^^^^^^
    } else {
      throw new Error("Profile doesn't exist")
//    ^^^^^
    }
  })
  // More promises further on, which I wait for:
  // profilePromise.then(myProfile => { … });
})


 类似资料:
  • 我见过这样的例子 但我也认为这是一种选择 抛出异常或简单返回NotFound (IHttpActionResult实例)有什么好处吗? 我知道响应/请求管道中的某些阶段可以处理这些结果中的任何一个,就像第一个示例一样

  • 问题内容: 我写的是,我正在使用Netbeans向每个函数添加类似专业的注释。因此,我从每一个开始,然后按来让Netbeans完成用于以下功能的默认注释方案。 到现在为止,我一直只在PHP语言中使用它,在这种情况下,如果遵循PHP函数确实包含了声明,则Netbeans始终仅在注释方案中添加部分。在所谓的“过程”(不返回任何值的函数)上,缺少此部分。 今天,我为Javascript函数尝试了同样的事

  • 问题内容: 我最近阅读了许多有关使用JavaScript进行排序的答案,而且我经常偶然发现一个如下所示的compare函数: 因此,它是一个比较函数,如果大于1则返回1,如果小于OR EQUAL TO 则返回-1 。如MDN(link)所述,比较函数也可以返回零,以确保两项的相对位置保持不变: 如果compareFunction(a,b)返回0,则a和b彼此保持不变,但对所有不同元素进行排序。 因

  • 我是流运营商的忠实粉丝。它不在标准库中,但我发现它非常有用。如果流只有一个值,它将在中返回该值。如果它没有值或有多个值,则返回。 我之前问了一个问题,@ThomasJungblut想出了这个很棒的实现: 唯一的问题是,你必须把它放在你的电话开始时 而不是按顺序结束 这使得它比其他流机制更难阅读。 作为流处理的新手,有人知道如何在一系列流转换的末尾设置一个短路的< code > single emp

  • 在MVVM模式中,ViewModel包含业务逻辑,并在需要更新时通知视图。视图还会通知用户事件。 据我所知,每个模型都应该有一个关联的ViewModel。因此,如果我们有以下模型: 用户 账目 我们将有以下视图模型: UserViewModel 帐户视图模型 然而,我找到的所有关于MVVM数据绑定的示例,都使用一个ViewModel作为布局。最近,谷歌在架构组件中引入了ViewModel类。这让我

  • 我目前正在一个后端有Spring,前端有Angularjs的网站上工作,我们已经讨论了后端响应以处理前端的消息对话框,我有一个问题要问: 假设我有一个API: 若客户机发出一个带有无效参数(如字符串)的请求,那个么应该从服务器返回哪个响应代码?HTTP 400错误的请求和响应正文包含消息“fromTime和toTime应采用时间戳格式”,还是HTTP 200包含相同的消息? 我看到了一些Googl