字符串值在被调用函数内变为null

时间:2017-02-22 14:39:34

标签: javascript node.js express promise bluebird

我的代码中发生了一些非常奇怪的事情,我将一个值传递给一个函数。但在该函数内部,该值为null,我无法理解为什么。我希望得到一个合适的值而不是null。

当我调用AdwordsService.isKeywordsCampaign时,在validateCampaingKeywords函数内部,我可以看到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

但是当我检查它在被调用函数中的值时,它是未定义的。

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

对我来说,最奇怪的部分现在来了。如果我在调用函数内部并检查arguments [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));
        }

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:-1)

调试是一系列分岔(分为两组),包括预期和观察到的行为之间差异的所有可能原因。消除编译器或IDE的潜在问题或与 - >的交互。操作员,不要通过点运算符立即使用函数返回值。而是先将它放在对象引用中。

  

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

记录campaign.customerId的值,然后将其作为参数传递,并在方法中作为参数显示之后。如果日志条目显示相同的值,则问题出在您从中提取函数的表达式中。如果没有,那么方法调用机制由于某种原因是行为不端。