我的代码中发生了一些非常奇怪的事情,我将一个值传递给一个函数。但在该函数内部,该值为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}
});
}
}
但是当我检查它在被调用函数中的值时,它是未定义的。
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;
});
}
对我来说,最奇怪的部分现在来了。如果我在调用函数内部并检查arguments [0]的值是什么,它会给我正确的值;
这是我的控制器内部调用的第一个函数,在这里我只找到给定的广告系列并进行更新。
// 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 :(得分:-1)
调试是一系列分岔(分为两组),包括预期和观察到的行为之间差异的所有可能原因。消除编译器或IDE的潜在问题或与 - >的交互。操作员,不要通过点运算符立即使用函数返回值。而是先将它放在对象引用中。
keywordsCampaignFlag = isKeywordsCampaign(campaign.customerId,req.user.googleRefreshToken);
记录campaign.customerId的值,然后将其作为参数传递,并在方法中作为参数显示之后。如果日志条目显示相同的值,则问题出在您从中提取函数的表达式中。如果没有,那么方法调用机制由于某种原因是行为不端。