2017-07-17 78 views
1
的NodeJS所以

,我有一段代码,使用的Promises,我现在用的是bluebird库。即使没有错误,承诺也会被拒绝。

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

这里.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功能看,我已经把一个console.logif(err)块内,而且也从未运行,从我的结论是我没有收到任何错误猫鼬查询。

尽管如此,代码完全跳过.then块,并落入catch链。我有then块内的简单console.log,并注意到一个有趣的事情是,err里面catch块回调值是MongoDB的文档的数组。

有人能解释,为什么我的代码以这种方式表现?

感谢您的帮助。

+0

也许Meeting.find()抛出一个异常 –

回答

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

太谢谢你了。我觉得很愚蠢。我认为这是一个错误的第一个回调。 –