Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我在使用try/catch的代码中会收到Node.js的额外错误消息?_Javascript_Node.js_Promise - Fatal编程技术网

Javascript 为什么我在使用try/catch的代码中会收到Node.js的额外错误消息?

Javascript 为什么我在使用try/catch的代码中会收到Node.js的额外错误消息?,javascript,node.js,promise,Javascript,Node.js,Promise,我在异步函数中使用了try/catch块,但Node.js会显示一些额外的错误消息。我的代码: const work = count => { const promise = new Promise((resolve,reject) => { const interval = setInterval(() => { console.log(count--); if(!count){

我在异步函数中使用了try/catch块,但Node.js会显示一些额外的错误消息。我的代码:

const work = count => {
    const promise = new Promise((resolve,reject) => {
        const interval = setInterval(() => {
            console.log(count--);
            if(!count){
                try{
                    clearInterval(interval);
                    throw 'Oops...'; // emulate unexpected error...
                    resolve('Work done!');
                }
                catch(err){
                    reject(err);
                }
            }
        }, 1000);
        console.log('Bingo!');
    });
    return promise;
};

const promise = work(3);
promise.then(context => console.log(`Ressult: ${context}`));
promise.catch(err => console.log(`Error: ${err}`));
结果:


我做错了什么?

您需要像下面这样更新代码:您没有将被拒绝的承诺处理为
。然后
返回新的承诺,在您的情况下,它是错误的承诺

    const work = count => {
    const promise = new Promise((resolve,reject) => {
        const interval = setInterval(() => {
            console.log(count--);
            if(!count){
                try{
                    clearInterval(interval);
                    throw 'Oops...'; // emulate unexpected error...
                    resolve('Work done!');
                }
                catch(err){
                    reject(err);
                }
            }
        }, 1000);
        console.log('Bingo!');
    });
    return promise;
};
const promise = work(3);
promise.then(context => console.log(`Ressult: ${context}`)).catch(err => console.log(`Error: ${err}`));

您需要像下面这样更新代码:您没有将拒绝的承诺处理为
。然后
返回新的承诺,该承诺在您的案例中是错误的承诺

    const work = count => {
    const promise = new Promise((resolve,reject) => {
        const interval = setInterval(() => {
            console.log(count--);
            if(!count){
                try{
                    clearInterval(interval);
                    throw 'Oops...'; // emulate unexpected error...
                    resolve('Work done!');
                }
                catch(err){
                    reject(err);
                }
            }
        }, 1000);
        console.log('Bingo!');
    });
    return promise;
};
const promise = work(3);
promise.then(context => console.log(`Ressult: ${context}`)).catch(err => console.log(`Error: ${err}`));

您没有处理此处返回的潜在错误
(提示:
。然后
返回一个新的承诺)@George是的,谢谢!所以@George-那将是一个复制品:p@Bravo这就是当你把VTC当作一个复制品时,SO生成的注释啊,OK@George-:py你没有处理这里返回的潜在错误
。(context=>console.log(`Ressult:${context}`)(提示:
。然后
返回一个新的承诺)@George是的,谢谢!所以@George-那将是一个复制品:p@Bravo这就是当你把职业训练局当作一个复制品时所产生的评论啊,OK@George-:p