我正在创建一个新的Promise(返回一个promise的类中的唯一方法)为
return new Promise(function(resolve, reject) {
... mongo DB call
if ( err ) {reject(err)}
if ( data ) {resolve(data)}
})
当我退回此处时,我可以在一个地方将此作为承诺阅读并使用
获取数据promise.then(..)
但是,当我尝试在另一个类中执行相同的操作时(它在两个类的第一行中),我得到的错误是读取,
[TypeError: Cannot read property 'then' of undefined]
有没有人遇到过类似的问题?
编辑:正如所建议的,这是实际的代码 -
module.exports = {
populateDashboard: function ( req, callback ) {
var userInfo = {userName: 'Business User1', role: 'business'};
console.log ('userInfo - ', userInfo); // Getting this value, obviously!
var promise1 = roleAccessRepository.getUserRoleAccess (userInfo.role);
promise1.then (
function(data) {
}
).catch(
function(err) {
console.log('error', err); // Error getting caught here
}
)}
}
module.exports = {
fetchCampaignInfo: this.fetchCampaignInfo,
}
fetchCampaignInfo = function ( role, userName, sectionName, callback ) {
var campaignList = [];
var promiseArray = [];
var promise1 = roleAccessRepository.getUserRoleAccess (role);
promise1.then (
onRoleSuccess = function ( data ) {
// This goes through fine
}
).catch(
function(err) {
console.log('error', err);
}
)}
}
module.exports = {
getUserRoleAccess: function ( role ) {
return new Promise (
function ( resolve, reject ) {
var roleAccess = mongoose.model ('roleAccess', userAccessRole);
roleAccess.find ({role: role}, function ( err, data ) {
if ( err ) {
console.log ('getUserRoleAccess - error', err);
reject (err);
}
console.log ('getUserRoleAccess - Data', JSON.stringify(data));
resolve (data);
});
});
}
}
答案 0 :(得分:0)
我会把它变成一个答案,因为它显然导致你弄清楚问题:
如果.catch()
处理程序中的代码在它抛出异常之前,它也可以命中promise1.then()
。你没有显示任何代码,所以我不知道是否会发生这种情况,但这是另一种方法.catch()
。
所有.then()
处理程序都是所谓的“throw-safe”。这意味着如果.then()
处理程序中的任何代码抛出异常,它将被promise的.then()
处理代码自动捕获,然后拒绝承诺,异常作为拒绝的原因。因此,在抛出异常的.then()
处理程序之后的任何链式处理程序将看到被拒绝的承诺。这意味着从promise1.then()
返回的承诺会被拒绝,因此promise1.then().catch()
会触及.catch()
处理程序。
这是一个简单的例子来说明:
function delay(t) {
return new Promise(function(resolve) {
setTimeout(resolve, t);
});
}
delay(100).then(function() {
console.log("#1");
throw new Error("some error");
}).then(function() {
console.log("#2");
}).catch(function(err) {
console.log("#3 ", err.message);
});
这将显示输出:
#1
#3 some error