ES6承诺:在()之后调用catch()

时间:2018-02-11 09:03:29

标签: javascript jquery ecmascript-6 es6-promise

以下代码中的Promise工作正常,Ajax请求(load() jQuery-function)也可以工作:

changeFragment(newFragment, fragmentUrn) {
    new Promise((resolve, reject) => {
        this.$MainContent.load(fragmentUrn, (response, status, xhr) => {
            //status === 'error' ? reject(xhr) : resolve();
            console.log(status == 'success');
            if (status === 'success'){
                console.log('resolve');
                resolve();
            }
            if (status === 'error') {
                console.log('reject');
                reject(xhr);
            }
        });
    }).then(() => {
        console.log('then');
        let newFragment = newFragment.createInstance();
        newFragment.initialize();
    }).catch((xhr) => {
        console.log('Why!?');
        console.error(`Error : ${xhr.status} ${xhr.statusText}`);
    });
}

然而,在then()之后,某种方式catch()也被调用了。我在控制台中输出了以下内容:

true
resolve
then
Why!?
Error: undefined undefined

2 个答案:

答案 0 :(得分:0)

你需要做这样的事情

Promise.resolve() .then(function(){return Function1()。catch(errorHandler1);})

答案 1 :(得分:-1)

我认为,因为你没有回复承诺,所以试着回复承诺,而不仅仅是用新的'来宣传它。

'然后'需要等待将被退回的承诺