另一个函数里面的函数不能在JS中执行

时间:2016-09-23 06:27:09

标签: javascript angularjs

在我当前的项目中,我有一个函数调用角度自定义服务并将数据分配给变量

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函数中的项,但它会给我一个未定义的输出

任何帮助都将非常感谢您解决此问题

3 个答案:

答案 0 :(得分:1)

首先,我将函数名称称为错误,getItem应为getItems

如果是拼写错误,请在从服务返回承诺后调用getItems方法。

您甚至可以从回调中添加错误功能。

当您使用此promise(then and error)时,下一行代码仅在响应来自服务时执行。

vm.addItem = function(){
    var newItem = {"title": vm.itemname};
    myservice.setToLibrary(newItem)
    .then(function(response){
        getItem();
    }
    function error(response) 
    {
     console.log('error')
    });
};

答案 1 :(得分:0)

函数名称为getItems()但是当您从addItem调用它时,您正在调用未定义的函数getItem() - s中缺少return你试图打电话的功能。

答案 2 :(得分:0)

如果我假设正确,则通过服务电话myservice.setToLibrary(newItem);添加项目,之后通过getItems();读取数据库中存在的项目,这也是服务电话,即{{1} }。

“未定义”背后的原因'输出

正如您在$http POST or 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(); }); 来电成功后进行getItems()来电,从而获得理想的结果。