在try catch块中使用条件

时间:2018-09-06 20:51:56

标签: javascript

const mutationType = new GraphQLObjectType({

    name: 'Mutation',
    fields: {
        addArticle: {
            type: articleDataNode,
            args: {
                    title: {type: GraphQLString},
                    content: {type: GraphQLString},
                    author_id: {type: GraphQLID}

                },
                resolve(parent, args){

                    try{

                        console.log(args.content);
                        if((args.title && args.content && args.author_id) !==  undefined){
                            let articleModel = new articleModel_i({
                                title: args.title,
                                content: args.content,
                                author_id: args.author_id, //Author ID should come from somewhere in applciation
                                createdAt: String(new Date())
                            })
                            return articleModel.save();
                            }else throw new Error("Arguments are not defined!")


                    }catch(e){ throw e}

                    }
        },
        addUser:{
            type: userDataNode,
            args: {
                username: {type: GraphQLString},
                firstname: {type: GraphQLString},
                lastname: {type: GraphQLString}
            },
            resolve(parent, args){
                let newUser = new userModel_i({
                    username: args.username, firstname: args.firstname, lastname: args.lastname, createdAt: String(new Date())
                });
                return newUser.save();
            }
        }


    }
})

我正在构建一个对文章执行CRUD的应用程序。用户创建文章时,需要输入一些参数。如果参数不存在,则程序应引发错误。在上面的示例中,我是否正确使用了try and catch块?如果发生错误,这会终止我的程序吗?还是在捕获错误后通过控制?

1 个答案:

答案 0 :(得分:0)

为帮助您了解引发错误时发生的情况以及运行或不运行哪种javascript,我编写了此代码。只需在控制台上运行它即可。

for(var i = 0; i < 10; i++) {
    setTimeout(() => {
        throw "err";
        console.log("not happening");
    });
}
setTimeout(() => console.log("DONE"), 1000);

发生的事情是,您所处的执行死了,此后没有任何代码将被执行,因此也没有调用等。但是稍后其他执行的函数将独立于崩溃函数执行。

也请不要在catch {}中抛出相同的异常。这与不捕获它相同,但是隐藏了第一个错误中有关发生原因的有价值的调试信息。