即使没有错误,承诺也会被拒绝。 的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); }) }) }