即使没有错误,Promise也会被拒绝。的NodeJS

时间:2017-07-17 10:50:24

标签: javascript node.js mongodb bluebird

所以,我有一段使用Promises的代码,我正在使用bluebird库。

问题是即使没有错误,我的承诺也会被拒绝。即使是简单的.then

,它也会完全跳过console.log

以下是使用promise的代码:

function returnMeetings(query) {
  return new Promise((reject, resolve) => {
    Meeting.find(query, (err, foundMeetings) => {
      if (err) {
           console.log("We have a error")
        reject(err);
      }
      resolve(foundMeetings);
    })
  })
}

以下是使用returnMeetings函数

的代码
returnMeetings(query)
    .then((data) => {
    console.log("here we are")
    // while (count < stopAt) {
    //   let localData = [];
    //   if (req.params.duration === 'monthly') {
    //     let {
    //       date1,
    //       date2
    //     } = twoDates(count, count);
    //     localData = data.filter((el) => {
    //       if (el.startDate) {
    //         let localDate = new Date(el.startDate);
    //         if (localDate >= date1 && localDate <= date2) {
    //           return el;
    //         }
    //       }
    //     })
    //     if (localData) {
    //       data.push({
    //         data: localData,
    //         month: count
    //       })
    //     }
    //
    //     if (count === stopAt - 1) {
    //       myEmitter.emit('found all meetings')
    //     } else {
    //       count++;
    //     }
    //   }
    // }
  }).catch((err) => {
    res.status(500).json({
      message: err
    })
  })

正如您在returnMeetings函数中看到的那样,我在console.log块中放置了一个if(err),并且它永远不会运行,因此我得出结论,我没有收到任何错误来自mongoose查询。

然而,代码完全跳过.then块,并进入catch链。我在console.log块中有一个简单的then,有一点需要注意的是err块内回调中catch的值是一个mongodb文档数组

有人可以解释一下,为什么我的代码会以这种方式运行?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你的Promise构造函数回调中的解析/拒绝顺序是错误的...函数的名称是无关紧要的,第一个是解决,第二个是拒绝......你实际上是在拒绝承诺resolve

即。你可以

  return new Promise((fred, wilma) => {

然后要解决承诺,您可以致电fred(value)并拒绝接听wilma(error)

换句话说,你给回调参数的名字是无关紧要的,位置是相关的

按如下方式更改您的代码:

function returnMeetings(query) {
  return new Promise((resolve, reject) => {
    Meeting.find(query, (err, foundMeetings) => {
      if (err) {
           console.log("We have a error")
        reject(err);
      }
      resolve(foundMeetings);
    })
  })
}
相关问题