Javascript 对graphql查询使用try-catch块

Javascript 对graphql查询使用try-catch块,javascript,reactjs,typescript,graphql,try-catch,Javascript,Reactjs,Typescript,Graphql,Try Catch,以前,我在graphql查询处理中使用.then回调 以前的代码: let submitForm = (freeSeats: Number, numberPlate: string, userId: Number) => { setIsSubmitted(true); addVehicle({ variables: { freeSeats: freeSeats, numberPlate: numberPlate,

以前,我在graphql查询处理中使用.then回调

以前的代码:

  let submitForm = (freeSeats: Number, numberPlate: string, userId: Number) => {
    setIsSubmitted(true);
    addVehicle({
      variables: {
        freeSeats: freeSeats,
        numberPlate: numberPlate,
        userId: userId,
      },
    })
      .then(({ data }: ExecutionResult<CreateVehicleResponse>) => {
        if (data !== null && data !== undefined) {
          setIsAdded(true);
        }
      })
      .catch((error: { message: string }) => {
        setIsAdded(false);
        setErrorMessage(error.message);
      });
  };
let submitForm=(freesets:Number,numberPlate:string,userId:Number)=>{
setIsSubmitted(true);
添加车辆({
变量:{
自由吃:自由吃,
数字板:数字板,
userId:userId,
},
})
.then({data}:ExecutionResult)=>{
if(数据!==null&&data!==未定义){
setIsAdded(true);
}
})
.catch((错误:{message:string})=>{
setIsAdded(false);
setErrorMessage(error.message);
});
};

我现在正试图切换到尝试拦截,但我无法这样做。我试图更改为异步函数,但如果删除.then行,则会出现数据错误,因为找不到该行。在这种情况下,使用try-catch块的正确方法是什么?

为了转换。然后要转换为async-await,您需要在函数上指定async关键字,然后在承诺之前使用
await

上面的代码与async wait类似

let submitForm = async (freeSeats: Number, numberPlate: string, userId: Number) => {
  try {
    setIsSubmitted(true);
    const {data} = await addVehicle({
      variables: {
        freeSeats: freeSeats,
        numberPlate: numberPlate,
        userId: userId,
      },
    })
    if (data !== null && data !== undefined) {
          setIsAdded(true);
    }
   } catch(error: { message: string }) {
        setIsAdded(false);
        setErrorMessage(error.message);
   };
  }; 

addVehicle是一个承诺,您不知道它是否成功使用了try-catch,而是必须使用try-catch(这是设计的意图)。您应该解释为什么要使用try-catch,也许人们会建议您为您的意图提供更好的解决方法Dym,因为您不知道它是否成功?如果没有,我会得到一个错误,它可以被捕获捕获,不是吗?听我的高级开发人员说我们应该删除。然后回调并使用异步等待。还不知道为什么@只有当您不希望在等待响应返回时执行任何业务逻辑代码时,才应使用许多人的volnaIn意见async await。在所有其他情况下,承诺仍然是更好的设计选择。我建议您阅读:然后尝试了解您的业务逻辑需要什么,然后选择真正合适的方法。我个人觉得自己陷入了使用async的陷阱,等待了很多次,在那里可以使用一个简单的承诺。很好的解决方法,但是你会用这种方法批准某人的PR吗?:-)@沃娜:我为什么不呢?你认为它有什么问题,为什么你认为它是一个解决办法?