gpt4 book ai didi

javascript - 即使没有错误,Promise 也会被拒绝。 Node.js

转载 作者:行者123 更新时间:2023-11-30 15:10:47 25 4
gpt4 key购买 nike

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

问题是即使没有错误,我的 promise 也会被拒绝。它完全跳过了 .then block ,即使对于一个简单的 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 函数中看到的那样,我在 if(err) block 中放置了一个 console.log,它从不运行,据此我得出结论,我没有收到来自 mongoose 查询的任何错误。

仍然,代码完全跳过了 .then block ,并落入了 catch 链。我在 then block 中有一个简单的 console.log ,需要注意的一件有趣的事情是 err 在回调中的值 catch block 是一个 mongodb 文档数组。

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

感谢您的帮助。

最佳答案

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

即你可以

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

然后要解决 promise ,您将调用 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);
})
})
}

关于javascript - 即使没有错误,Promise 也会被拒绝。 Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com