2017-02-22 5 views
1

내 코드에서 실제로 이상한 일이 발생했습니다. 함수에 값을 전달하고 있습니다. 그러나 그 함수 안에는 값이 null이고 왜 그 값을 해석 할 수 없습니다. 나는 적절한 가치와 null을 기대하고 있었다. 내가 AdwordsService.isKeywordsCampaign 내가 campaign.customerId의 값이 정의되어 있음을 알 수 전화문자열 값이 호출 된 함수 내에서 null이 됨

function validateCampaingKeywords(req){ 
    return function(campaign){ 
    return AdwordsService 
     .isKeywordsCampaign(campaign.customerId,req.user.googleRefreshToken) 
     .then((isKeywordsCapaign) =>{ 
      return {revert:!isKeywordsCapaign} 
     }); 
    } 
} 

enter image description here

"1624183869"하지만 내가 느릅 나무 값을 확인할 때 validateCampaingKeywords 기능 내부

호출 된 함수 내부에 있으므로 정의되지 않습니다.
export function isKeywordsCampaign(accountId,customerRefreshToken){ 
    let lastWeekDate = new Date(); 
    lastWeekDate.setDate(lastWeekDate.getDate() - 7); 
    return getCampaingsRawData(accountId,customerRefreshToken,lastWeekDate) 
        .then(campaignReportToCampaignDataConverter.convert).then((totalSpentValue) => { 
     return totalSpentValue > 0; 
    }); 
} 

enter image description here

나에게 이상한 부분

지금 온다. 호출 된 함수 안에 있고 인수 [0]의 값이 무엇인지 확인하면 올바른 값을 갖습니다.

enter image description here

이 여기에 그냥 주어진 캠페인을 찾아서 업데이트, 내 컨트롤러 내에서 호출 첫 번째 기능입니다.

// Upserts the given Campaign in the DB at the specified ID 
     export function upsert(req, res) { 
      if(req.body._id) { 
      delete req.body._id; 
      } 
      return Campaign.findOneAndUpdate({_id: req.params.id}, req.body, {new: true, upsert: true, setDefaultsOnInsert: true, runValidators: true}).exec() 
      .then(validateCampaingKeywords(req)) 
      .then(respondWithResult(res)) 
      .catch(handleError(res)); 
     } 

왜 이런 일이 일어나는 지 알고 계십니까?

+0

확실히 이상합니다. 어떤 의미를 가질 수있는 유일한 방법은 'accountId'의 두 가지 모양이 일치하지 않는 것입니다. 즉, 인쇄상의 오류입니다. 그러나 그럴 수는 없다. 좋은 측정을 위해 재 입력하거나 복사/붙여 넣기를 시도하십시오. –

답변

0

디버깅은 예상 동작과 관찰 동작 간의 차이에 대한 모든 가능한 원인의 일련의 분기입니다 (두 세트로 나누기). 컴파일러 또는 IDE의 잠재적 인 문제 또는 -> 연산자와의 상호 작용을 제거하려면 도트 연산자를 사용하여 함수 반환 값을 즉시 사용하지 마십시오. 대신 먼저 개체 참조에 배치하십시오.

keywordsCampaignFlag = isKeywordsCampaign (campaign.customerId, req.user.googleRefreshToken);

매개 변수로 전달되기 전에 campaign.customerId의 값을 기록한 다음 메서드 내에서 인수로 제공하면됩니다. 로그 항목에 동일한 값이 표시되면 함수를 가져온 식에 문제가있는 것입니다. 그렇지 않은 경우, 메소드 호출 메카니즘은 어떤 이유로 오작동합니다.