javascript - 如何解决承诺并捕获错误
问题描述
我正在尝试用户webgazer.js
我的代码基本上检查以查看是否webgazer
已初始化,以及在初始化时它解决了一个调度操作的承诺。但是,如果例如没有网络摄像头我需要抛出错误,则此方法有效。我的代码中的错误永远不会被调用。
这是我的代码
export function detectJsCamera() {
return async(dispatch) => {
dispatch({type: types.JS_DETECTING_CAMERA});
try {
await detectCamera();
await dispatch({type: types.JS_CAMERA_DETECTED});
} catch (error) {
await dispatch({type: types.CAMERA_DETECTION_FAILED, error: error.message});
throw error;
// this.props.history.push('/setup/positioning')
};
}
}
const detectCamera = () => new Promise((resolve, reject) => {
const checkIfReady = () => {
if (webgazer.isReady()) {
resolve('success');
} else {
console.log('called')
setTimeout(checkIfReady, 100);
}
}
setTimeout(checkIfReady,100);
});
解决方案
您需要拒绝才能抛出如下异常
const detectCamera = () => new Promise((resolve, reject) => {
const checkIfReady = () => {
if (webgazer.isReady()) {
resolve('success');
} else {
console.log('called');
reject("some error");
}
}
setTimeout(checkIfReady,100);
});
推荐阅读
- airflow - Apache Airflow SparkSQLOperator 不断打印空日志
- android - 使用改造进行解析时文本返回 null
- java-8 - 无法使用 DateTimeFormatter 解析日期
- c# - 具有多个参数的控制器动作
- cypress - cypress run:保持测试运行器打开
- laravel - Laravel登录测试在phpunit中失败
- reactjs - React 演示与容器客户端验证
- android - Android Rxjava2 bindToLifecycle
- azure-devops - 在 VSTS 部署到 App Center 构建任务中格式化发行说明
- ios - Custom circular progress view in awakeFromNib