Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 另一个函数中的函数不';不能在JS中执行_Javascript_Angularjs - Fatal编程技术网

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的答案,它对我有效。