Javascript 如何解决承诺并抓住错误

Javascript 如何解决承诺并抓住错误,javascript,reactjs,redux,Javascript,Reactjs,Redux,我正在尝试使用webgazer.js,其中我的代码主要检查webgazer是否已初始化,并且在初始化时,它会解析一个发送操作的承诺。但是,如果没有网络摄像头,我需要抛出一个错误,这是可行的。我的代码中的错误从未被调用 这是我的密码 export function detectJsCamera() { return async(dispatch) => { dispatch({type: types.JS_DETECTING_CAMERA}); try

我正在尝试使用
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);
});

您需要在detectCamera方法中调用reject()当您的webgazer未初始化时,它将被捕获在detectJsCamera方法中的catch块中。

您需要调用reject(),因此会抛出promise中的错误,dispatch不是异步调用唯一的问题是webgazer需要一段时间才能初始化,因此承诺将在解决之前被拒绝?这就是为什么我想您需要
webgazer.isReady()
来检查它是否准备好了。您需要确定webgazer是否准备就绪()