2017-02-22 21 views
1

在我的代码中发生了一些非常奇怪的事情,我将一个值传递给一个函数。但在该函数内部,该值为空,我不明白为什么。我期待得到一个适当的价值,而不是空。字符串值在被调用函数内变为空

里面当我打电话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

,但是当我检查至极值它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的值作为参数传递并作为参数呈现在方法中之后记录它的值。如果日志条目显示相同的值,那么您的问题出现在您从中抽取函数的表达式中。如果没有,那么方法调用机制出于某种原因是行为不当的。

相关问题