1
我有一個模塊中的功能,使用該請求的承諾,本機模塊來查詢CouchDB的數據庫:的Node.js:如何返回rejcted承諾沒有得到UnhandledPromiseRejectionWarning
userByEmail: (email) => {
const options = {
url: `${config.couchdb.url}/medlog/_design/user/_view/by_email_or_userid?key="${email}"`,
json: true,
};
return rp.get(options)
.then(users => users.rows.map(row => row.value))
.catch(reason => Promise.reject(new Error('test')));
}
第二模塊包含一個函數使用第一個:
router.get('/checkEmailExistence', (req, res) => {
couchdb.userByEmail(req.param('email'))
.then((userArray) => {
res.status(200).end(userArray.length > 0); // returns 'true' if at least one user found
})
.catch((e) => {
winston.log('error', e.message);
res.status(500).end(e.message);
});
在沒有數據庫連接的情況下,拒絕來自request-promise-native模塊的許諾。我想要的是在第二個函數中捕獲該拒絕,並向調用者返回內部服務器錯誤。爲了拒絕來自request-promise-native模塊的拒絕,我在第一個函數中捕獲它並返回一個新的拒絕承諾。
不幸的是,我總是得到警告,我有一個未處理的承諾拒絕。我該如何解決這個問題?
編輯
我剛看到,我用於測試的代碼路徑錯誤。所以上面的代碼不會產生警告。對困惑感到抱歉。
解決這個 '問題' 在第一個模塊,而不是'.catch(原因=> Promise.reject(新的錯誤( '測試'))); '嘗試'.catch(reason => new Error('test'));' –
在這種情況下,我會得到一個解決錯誤消息的承諾。相反,我想得到一個被拒絕的承諾。 –
你不能在'catch'裏面拒絕,但是你可以這樣做 '.catch(reason => throw new Error('test'));' –