Javascript 另一个函数中的函数不';不能在JS中执行
在我当前的项目中,我有一个函数,它调用一个角度自定义服务并将数据分配给一个变量Javascript 另一个函数中的函数不';不能在JS中执行,javascript,angularjs,Javascript,Angularjs,在我当前的项目中,我有一个函数,它调用一个角度自定义服务并将数据分配给一个变量 var vm = this; vm.itemname = ''; function getItems(){ var result = myservice.getFromLibrary(); result.then(function(data){ vm.dataSet = data; }); } 我有另一个函数来保存数据,保存数据后,应该调用getItem()函数,如下所示 vm.addIte
var vm = this;
vm.itemname = '';
function getItems(){
var result = myservice.getFromLibrary();
result.then(function(data){
vm.dataSet = data;
});
}
我有另一个函数来保存数据,保存数据后,应该调用getItem()函数,如下所示
vm.addItem = function(){
var newItem = {"title": vm.itemname};
myservice.setToLibrary(newItem);
getItems();
};
但是当vm.addItem被调用时,它不会在getItems函数中检索项目,但它会给我一个未定义的输出
如果您能提供任何帮助来解决此问题,我们将不胜感激。函数名为
getItems()
,但是当您从addItem
调用它时,您正在调用一个未定义的函数getItem()
-您试图调用的函数名中缺少s
。首先,如果函数名调用错误,getItem
应该是getItems
如果是输入错误,请在服务返回承诺后调用getItems方法
vm.addItem = function(){
var newItem = {"title": vm.itemname};
myservice.setToLibrary(newItem)
.then(function(response){
getItem();
}
function error(response)
{
console.log('error')
});
};
您甚至可以从回调中添加error函数
当您使用此承诺(然后和错误)
时,下一行代码仅在响应来自服务时执行
vm.addItem = function(){
var newItem = {"title": vm.itemname};
myservice.setToLibrary(newItem)
.then(function(response){
getItem();
}
function error(response)
{
console.log('error')
});
};
如果我假设正确的话,您是通过服务调用myservice.setToLibrary(newItem)添加一个项目的代码>之后,通过
getItems()读取数据库中的项
这又是一个服务调用,即$httppost或GET
输出“未定义”的原因
正如您在vm.addItem()
函数中所看到的,您正在执行两个$http
调用来添加和读取。由于$http
本质上是异步的,所以您的getItems()
甚至在myservice.setToLibrary(newItem)
完全执行之前就已经执行了
因此,您将获得一个未定义的输出
解决方案方法
对vm.addItem()
函数进行如下调整
vm.addItem = function(){
var newItem = {"title": vm.itemname};
myservice.setToLibrary(newItem).success(function(data){
getItems();
});
在
setToLibrary()
调用成功后,我们进行了getItems()
调用,这种方法将得到您想要的结果。Add item不会返回任何内容,因此它应该是未定义的。除了getItems之外,不确定它是否相关!==getitem问题与您发布的代码有关,但是myservice.getFromLibrary()
显然是异步的,因此,vm.dataSet
在调用vm.addItem
Hi@Sravan之后的某个时间才会设置,非常感谢您的回复。是的,它有效。问题出现在服务文件中,因为我在前面尝试了这种方法,我得到了一个错误,说然后没有定义,但是当我签入服务文件时,它没有返回承诺,我也在那里修复了它。现在它工作得很好。谢谢你的回答谢谢你指出了这一点,我写这篇文章的时候是个打字错误,它不在实际的代码中。谢谢你简短清晰的解释,我尝试了@Sravan的答案,它对我有效。