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

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

问题是,即使没有错误,我的承诺也会被拒绝。 即使是简单的console.log .then它也会完全跳过.then

以下是使用诺言的代码:

 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函数中看到的,我已经在if(err)块中放置了一个console.log ,并且它永远不会运行,因此我得出结论,我没有从mongoose查询中收到任何错误。

但是,代码完全跳过.then块,并落入catch链。 在then块中有一个简单的console.log ,需要注意的是catch块内的callback函数的值是一个mongodb文件数组。

有人可以解释,为什么我的代码以这种方式performance?

谢谢你的帮助。

Promise构造函数callback中的parsing/拒绝顺序是错误的…函数的名称是无关的,第一个是解决,第二个是拒绝…当您调用resolve时,实际上是拒绝了promise

即你可以

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

那么要解决诺言,你会调用fred(value)并拒绝你会调用wilma(error)

换句话说,你给callback参数的名字是不相关的,这个位置是相关的

改变你的代码如下:

 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); }) }) }