gpt4 book ai didi

javascript - 如何将对象作为参数传递?

转载 作者:行者123 更新时间:2023-12-01 00:57:21 33 4
gpt4 key购买 nike

我的代码的某些部分随机遇到问题。

该对象在 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 服务的这个函数中的后端时。

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:[] 是空的,但在发送之前在 Angular 服务中执行 console.log(tData)我在那里看到了正确的数据。当我将数据发送到后端时,我丢失了数据。我在另外 3 个类似的案例中也遇到过这个问题。

为什么有些数组在后端正常,而其他数组则不行?

我尝试了很多方法,但发送到后端的对象中只有一项变空了。

如果您需要更具体的代码,请在评论中告诉我。

更新

这里的代码我将类别推送到 Controller 中:

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);
})
}

2

这是我在前端调用我的函数的地方:

<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 服务 updateStuff

已解决

解决了在 getCategoryByName 方法中添加链式 promise 并添加嵌套在 getCategoryByName() 方法中的 updateTest() 方法的问题,或多或少类似于@T.J。 Crowder 提出建议,所以我给出响应。

最佳答案

Code here I push category in the controller:

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应该返回 promise 链:

    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取决于该 promise 的解决。

(您还需要确保某些东西可以处理链的拒绝路径。您当前的 getCategoryByName 会忽略错误,如果 Category.getCategoryByName 失败,这将导致控制台中出现“未处理的拒绝”错误。)

关于javascript - 如何将对象作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56440788/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com