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块?如果发生错误,这会终止我的程序吗?还是在捕获错误后通过控制?
答案 0 :(得分:0)
为帮助您了解引发错误时发生的情况以及运行或不运行哪种javascript,我编写了此代码。只需在控制台上运行它即可。
for(var i = 0; i < 10; i++) {
setTimeout(() => {
throw "err";
console.log("not happening");
});
}
setTimeout(() => console.log("DONE"), 1000);
发生的事情是,您所处的执行死了,此后没有任何代码将被执行,因此也没有调用等。但是稍后其他执行的函数将独立于崩溃函数执行。
也请不要在catch {}中抛出相同的异常。这与不捕获它相同,但是隐藏了第一个错误中有关发生原因的有价值的调试信息。