簡體   English   中英

另一個函數中的函數不會在 JS 中執行

[英]function inside another function doesn't execute in JS

在我當前的項目中,我有一個函數調用 angular 自定義服務並將數據分配給變量

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 函數中的項目,但它給了我一個未定義的輸出

任何幫助將不勝感激解決此問題

首先,我你調用的函數名錯了, 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')
    });
};

函數名稱是getItems()但是當您從addItem調用它時,您正在調用一個未定義的函數getItem() - 您嘗試調用的函數名稱中缺少s

如果我假設正確,您正在通過服務調用myservice.setToLibrary(newItem);添加一個項目myservice.setToLibrary(newItem); 然后通過getItems();讀取 DB 中存在的項目getItems(); 這又是一個服務調用,即$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();
    });

當我們在setToLibrary()調用成功后進行getItems()調用時,這種方法將獲得您想要的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM