当我处理浅层组件时,会在method_1()
中调用componentDidMount()
并调用实用程序method_2()
,最后它会调用method_3()
,这是一个基于承诺的请求。
运行npm test
示例: Loginn.spec.js:
const wrapper = shallow(<Login />)
Error: UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
下面给出的代码流。
Login.js:
import { AuthService } from '../../react-auth';
componentWillMount() {
const config = {
environment: 'qa',
google: true
}
const updateLoginState = function (isBool, currentContext) {
currentContext.updateState('authStatusCheck', isBool);
}
authService.init(config, this, updateLoginState)
}
Auth.js
import UmsLib from './umsLib'
export default class AuthService{
init(customOptions, loginContext, updateLoginState) {
// some code.
UmsLib.getStatus(customOptions, loginContext, updateLoginState);
};
}
ums.js
import ums from ‘user-management’;
export class UmsLib{
getStatus(config, loginContext, updateLoginState) {
ums.init(this.configOptions)
.then(user => {
console.log("promise-----------------")
if (user && ums.isReady) {
return updateLoginState(true, loginContext);
}
})
.catch(error => {
throw Error('Failed calling UMS Library', error);
})
}
}
我添加了try / catch来引发所有可能的错误,并且还尝试在测试用例中处理Promise,但是似乎我在某处做错了。任何建议,将不胜感激。
答案 0 :(得分:2)
这是因为您在throw Error
函数中catch
的情况下,导致未处理的承诺被拒绝。这正是您在控制台中得到的。
问题在于catch()
函数返回Promise
。 From MDN docs:
如果onRejected抛出错误或返回本身被拒绝的Promise,则由
Promise
返回的catch()
被拒绝;否则,它将解决。
This SOF discussion也可以帮助理解Promise链。