我随机遇到了代码的某些部分。
此对象在angular controller
中声明。
this.tData = {
'questions':[],
'typeQuestion':[],
'category':[],
'dName':this.dName,
'tCodigo':this.tCodigo}
然后我从其他函数中获取了一些数据并将其推送到各个字段中,
this.tData.questions.push(this.idQuestion) // this come from frontend ng-model
this.tData.typeQuestion.push(this.typeQuest) // this come from frontend ng-model
this.tData.category.push(this.idCategory)// this come from frontend ng-model
这很好地构造了我的对象。进行console.log(this.tData)
演示后,该对象完全正常。但是,当我在angular service
的此功能中将其传递给后端时。
this.updateStuff = function(codStuff,tData){
return $http.put('/updateStuff' + codStuff,tData)}
后端console.log(params)
做的对象是
{
questions:['exampleId'],
typeQuestion:['exampleData'],
category:[], // HERE IS THE PROBLEM
dName:'exampleName',
tCodigo:'exampleCod'}
就像您看到category:[]
是空的,但是在发送console.log(tData)
的服务angular
之前,我在那看到正确的数据。
我将数据发送到后端时会丢失数据。这种问题在其他3种情况下发生在我身上。
为什么某些数组在后端可用,为什么其他数组不可用?
我尝试了很多事情,但是发送到后端的对象中的任何一项都变空了。
如果您需要更具体的代码,请在注释中告诉我。
代码在这里我将类别推入控制器中
this.getCategoryByName = function(){
this.bName = document.getElementById('seCategory').value;
Category.getCategoryByName(this.bName).then((result)=>{
this.idCategory = result.data.data._id; // this give me id of category
this.tData.category.push(this.idCategory);
})
}
这是我在前端调用函数的地方:
<button class="btn btn-primary" ng-click="ctController.getCategoryByName(); ctController.updateTest();" > up </button>
这是updateTest()函数的代码:
this.updateTest = function(){
Test.updateTest(this.codTest,this.tData).then(result=>{})
}
上述方法调用angular service
updateStuff
解决了在方法getCategoryByName中添加链许诺和在嵌套在getCategoryByName()方法中的updateTest()方法或多或少地类似于@ T.J的问题。人群拥挤,所以我给它答复。
答案 0 :(得分:2)
代码在这里我将类别推入控制器中
this.getCategoryByName = function(){ this.bName = document.getElementById('seCategory').value; Category.getCategoryByName(this.bName).then((result)=>{ this.idCategory = result.data.data._id; // this give me id of category this.tData.category.push(this.idCategory); }) }
这告诉我们您是在updateStuff
完成工作之前致电Category.getCategoryByName
,因此在之前致电this.tData.category.push
。 console.log
似乎向您显示this.tData.category
中内容的原因是(如我在评论中提到的),原因是deferred evaluation in the console。
这也解释了为什么有时发生的原因:您在该Category.getCategoryByName
操作和调用updateStuff
的操作之间存在竞争。有时,Category.getCategoryByName
获胜,因此updateStuff
包含推送的信息,而其他时候,调用updateStuff
的代码获胜,因此updateStuff
在this.tDate.category
中没有信息(还)。
this.getCategoryByName
应该返回承诺链:
this.getCategoryByName = function(){
this.bName = document.getElementById('seCategory').value;
return Category.getCategoryByName(this.bName).then((result)=>{
// ^^^^^^
this.idCategory = result.data.data._id; // this give me id of category
this.tData.category.push(this.idCategory);
});
};
...然后,您应根据该承诺的解决方案做出调用updateStuff
的任何事情。
(您还需要确保某些东西可以处理链的拒绝路径。您当前的getCategoryByName
会忽略错误,如果Category.getCategoryByName
失败,则会在控制台中导致“未处理的拒绝”错误。)