我正在使用ESM在NodeJS中创建一个可观察 (RxJS)。在可观察到的中,我正在使用猫鼬执行查询。我得到了结果,但是控制台返回错误(在问题的末尾详细说明)。
我尝试用Javascript、、答应、和来执行操作,试图用操作符来处理错误(,try,catch,)。
//-----------------------------------------------------------------//
// WITHOUT PROMISES:
//-----------------------------------------------------------------//
// Create observable obsAuth:
const obsAuth = new Observable(async (observer) => {
try{
const doc = await people.Model.findOne();
observer.next(doc);
} catch (err) {
observer.error(err);
}
// Finish observer:
observer.complete();
});
// Observe sub-element content (Subscribe):
let subAuth = obsAuth.subscribe({
next: doc => {
res.status(200).send({ success: true, people_data: doc });
console.log(doc);
},
error: err => {
res.status(500).send({ success: false, error: err });
console.error('Error: ' + err);
},
complete: () => console.log('Suscripción finalizada')
});
// Unsuscribe:
subAuth.unsubscribe();
//-----------------------------------------------------------------//
//-----------------------------------------------------------------//
// WITH PROMISES:
//-----------------------------------------------------------------//
// Build people query:
const peopleQueryMongoDB = people.Model.findOne();
// Create observable obsAuth:
const obsAuth = new Observable(async (observer) => {
// Excecute people query (Promise):
await peopleQueryMongoDB.exec()
.then((doc) => {
observer.next(doc);
})
.catch((err) => {
observer.error(err);
});
// Finish observer:
observer.complete();
});
// Observe sub-element content (Subscribe):
let subAuth = obsAuth.subscribe({
next: doc => {
res.status(200).send({ success: true, people_data: doc });
console.log(doc);
},
error: err => {
res.status(500).send({ success: false, error: err });
console.error('Error: ' + err);
},
complete: () => console.log('Suscripción finalizada')
});
// Unsuscribe:
subAuth.unsubscribe();
//-----------------------------------------------------------------//在这两种情况下,我都有完全相同的行为。我得到了结果,并在控制台中出现了以下错误。
控制台错误:
node:internal/process/promises:246
triggerUncaughtException(err, true /* fromPromise */);
^
Error
...
...
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
message: '1 errors occurred during unsubscription:\n' +
'1) TypeError: finalizer.unsubscribe is not a function',
errors: [
TypeError: finalizer.unsubscribe is not a function
...
...
at processTicksAndRejections (node:internal/process/task_queues:96:5)
]
}提前谢谢!
发布于 2022-04-29 07:07:01
昨天也经历过同样的问题。
您的代码的问题是,您给了可观察到的承诺作为Teardown逻辑。
重构代码的最简单方法是:
const obsAuth = new Observable((observer) => {
(async () => {
// Excecute people query (Promise):
await peopleQueryMongoDB.exec()
.then((doc) => {
observer.next(doc);
})
.catch((err) => {
observer.error(err);
});
})().then(ignored => observer.complete()) // Finish observer:
});但你也可以用
fromPromise(peopleQueryMongoDB.exec())https://stackoverflow.com/questions/71511646
复制相似问题