2017-07-17 71 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

太謝謝你了。我覺得很愚蠢。我認爲這是一個錯誤的第一個回調。 –