2015-07-28 34 views
0

我希望res中的数据传递给我的notes变量。但是它会返回一个更大的嵌套对象。为什么会发生? 如果我在控制台中检查cleanArrayOfNotes的值,我得到了我想要的对象,但是一旦它被分配为注释它就成为一个相当大的对象。我知道这是承诺的性质的一部分,目前我仍然试图理解。任何帮助?我怎样才能得到我的数组与返回一个函数与承诺的对象?

notes_service.js

var notesService = {notesObjectInService: [], newNote: null}; 


    notesService.getAll = function() { 
     return $http.get('/notes.json').success(function(data){ 
      //console.log(data) 
      angular.copy(data, notesService.notesObjectInService); 
      //console.log(notesService) 
     }) 
    }; 

navCtrl.js

var notes = notesService.getAll().then(function(res){ 

      var cleanArrayOfNotes = res.data; 
      //navCtrl line12 
      console.log(cleanArrayOfNotes); 
      return cleanArrayOfNotes; 
     }); 
     //navCtrl line16 
     console.log(notes); 

enter image description here

+0

将函数赋值给notes变量,所以它将是'getAll()',它返回'$ http'的承诺。因此,您的笔记变量是一个承诺,您的'cleanArrayOfNotes'是已解析的数据 – devqon

+0

因此,如何才能将局部变量分配给解析的数据? – vinibol12

+0

将其分配给承诺。 –

回答

0

这应该为你工作:

notes_service.js

app.factory ('NoteService', function($http) { 
    return { 
     getAll: function() { 
      return $http.get('/notes.json').then(function(response) { 
        return response.data; 
      }); 
     } 
    } 
}); 

navCtrl.js

NotesService.getAll().then(function(res){ 

     $scope.cleanArrayOfNotes = res.data; 

    }); 

或者,如果你想返回的结果,而不是承诺,您可以:

notes_service.js

app.factory ('NoteService', function($http) { 
    var notes = []; 
    var promise = $http.get('/notes.json').then(function(response) { 
      angular.copy(response.data, notes); 
      return notes; 
    });  

    return { 
     getAll: function() { 
      return notes; 
     }, 
     promise: promise 
    } 
}); 

navCtrl.js

 // get array of notes 
    scope.cleanArrayOfNotes = NotesService.getAll(); 

    // or use promise 
    NoteService.promise.then(function(response) { 
     scope.cleanArrayOfNotes = response.data; 
    }); 
+0

最后一个选项有竞争条件。 –

+0

你能解释一下吗? – pixelbits

+0

如果在运行控制器代码时'getAll'中的注释未加载会怎么样?没有任何事情要求它等待它,使它避免竞争条件的方法是在路由器或其他机制中“解决:”。 –

相关问题