在nodejs中重定向时,我偶然发现了一个与promises有关的奇怪问题。在下面的代码中,我使用一个函数来处理对象的写入,如果它拒绝它将检查该项是否存在,如果它没有解析。当它解析时,我将用户重定向到另一个页面,该页面包含其url中示例中使用的id。
var Test = function() {
var obj = {};
function addItemToObj(id) {
return new Promise(function(resolve, reject) {
var idAlreadyExists = obj[id] ? true : false;
if (idAlreadyExists) {
return reject('id already exists');
}
obj[id] = 'test';
return resolve(id);
});
}
return {
createTestPage: function(request, response) {
var id = 'testid';
return addItemToObj(id).then(function(id) {
return response.redirect(`/newPage/${id}`);
}).catch(function(error) {
console.error(error);
});
}
}
}
module.exports = new Test;
因此,当我运行此代码时,我收到此错误:
(node:46878)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:2):TypeError:无法在字符串'Model already exists'上创建属性'_locals' < / p>
错误在于我说我没有处理拒绝,但我处在捕获状态。当我删除重定向时,错误消失了,但我找不到原因。
任何人都可以解释这个问题吗?