2017-10-27 15 views
1

저는 클라이언트 용 ReactJS를 Relay와 함께 사용하고 있습니다. 내 GraphQLServer에서 전송 오류 응답을 처리 할 수있는 방법Relay Modern에서 돌연변이 오류를 처리하는 방법은 무엇입니까?

import { 
    commitMutation, 
    graphql 
} from 'react-relay'; 

import environment from '../../../../environment'; 


const mutation = graphql` 
    mutation CompanyMutation($company: CompanyInput!) { 
     createCompany(data: $company) { 
      id 
     } 
    } 
` 

export const createCompany = (company, callback) => { 

console.log(company); 

    const variables = { 
     company: company 
    } 

    commitMutation(
     environment, 
     { 
      mutation, 
      variables, 
      onCompleted:() => { 
       callback() 
      }, 
      onError: (error) => { 
       throw new Error(error) 
      }, 
     }, 
    ); 
} 

: 다음 돌연변이 고려 경우에

{ 
    "errors": [ 
    { 
     "message": "E11000 duplicate key error collection: mom.companies index: name_1 dup key: { : \"TEST 

\" }", 
     "locations": [ 
     { 
      "line": 4, 
      "column": 3 
     } 
     ], 
     "stack": "WriteError({\"code\":11000,\"index\":0,\"errmsg\":\"E11000 duplicate key error collection: mom.companies index: name_1 dup key: { : \\\"RENATO\\\" }\",\"op\":{\"createdAt\":1509103201877,\"deleted\":false,\"name\":\"TEST\",\"ein\":\"1234\",\"test\":false,\"multiSite\":true,\"siteLimit\":10,\"enabled\":false,\"_id\":\"59f316618ba865186815d3de\",\"__v\":0}})\n at Function.MongoError.create (D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb-core\\lib\\error.js:31:11)\n at toError (D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb\\lib\\utils.js:139:22)\n at D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb\\lib\\collection.js:669:23\n at handleCallback (D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb\\lib\\utils.js:120:56)\n at D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb\\lib\\bulk\\unordered.js:465:9\n at handleCallback (D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb\\lib\\utils.js:120:56)\n at resultHandler (D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb\\lib\\bulk\\unordered.js:413:5)\n at D:\\9. DEV\\WORKSPACE\\momejected\\node_modules\\mongodb-core\\lib\\connection\\pool.js:469:18\n at _combinedTickCallback (internal/process/next_tick.js:67:7)\n at process._tickDomainCallback (internal/process/next_tick.js:122:9)", 
     "path": [ 
     "createCompany" 
     ] 
    } 
    ], 
    "data": { 
    "createCompany": null 
    } 
} 

을의 onError가 호출되지 않습니다.

돌연변이 내에서 반환 된 오류를 어떻게 잡아서 처리 할 수 ​​있습니까?

답변

0

onCompleted이 문서 Relay Modern Mutations

에하지만 내 생각에 responseerror이다이 개 매개 변수를 반환하는 콜백 함수 그래서 난 그냥이

export const createCompany = (company) => 
    new Promise((resolve, reject) => { 
    const variables = { 
     company 
    }; 

    commitMutation(
     environment, 
     { 
     mutation, 
     variables, 
     onCompleted: (resp, err) => { 
      if (err) return reject(err); 
      return resolve(resp); 
     }, 
     onError: (err) => { 
      return reject(err); 
     } 
     } 
    ); 
    }); 
같은 약속으로 변경 처리가 용이하지 않는 것

구성품을 호출하는 방법

createCompany(company) 
    .then((resp) => { 
    // handle your response here.. 
    }) 
    .catch((err) => { 
    // handle your error here.. 
    })