2017-02-22 34 views
1

В моем коде есть что-то действительно странное, я передаю значение функции. Но внутри этой функции значение равно null, и я не могу понять, почему. Я ожидал получить правильное значение, а не null.Значение строки становится нулевой внутри вызываемой функции

Внутри функции validateCampaingKeywords, когда я называю AdwordsService.isKeywordsCampaign я могу видеть, что значение campaign.customerId определена и является «1624183869»

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

enter image description here

но когда я проверяю Wich значение оно имеет внутри вызываемой функции, она не определена.

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 перед его передачей в качестве параметра и после его представления в качестве аргумента внутри метода. Если записи журнала показывают одно и то же значение, то ваша проблема находится в выражении, из которого вы вытащили функцию. Если нет, то механизм вызова метода по какой-то причине является неправильным.