Javascript承诺并更新变量

时间:2016-04-07 13:40:07

标签: javascript angularjs ionic-framework promise

我一直在搞乱登录Spotify并从我的Ionic应用程序中的服务执行大多数数据检索,但承诺导致代码完全暂停。

以下是Controllers.js的相关部分:

  $scope.tracks = [];

  $scope.getTracks = function () {
    var tracks = {},
            i;
        for (i = 0; i < Tracks.uris.length; i++) {
            console.log('Getting Track ' + i);
            tracks[i] = SpotifyService.getTrack(Tracks.uris[i].id, Tracks.uris[i].loved, Tracks.uris[i].from);
        }
        return tracks;
  }

  $scope.refresh = function () {
    console.log('Refresh Tracks Started');
    $scope.tracks = $scope.getTracks().then(function (data) {
      console.log('Getting tracks');
      return data;
    })
    .catch(function (error) {
      console.log(error);
    });
    $scope.$broadcast('scroll.refreshComplete');
  }

拉动刷新操作发生$scope.refresh()功能。此函数称为精细,但在第一个console.log()后停止。以下是控制台的摘录(包含其他记录):

2016-04-07 14:30:38.419 HelloCordova[8269:377355] updateInfo() data: [object Object]
2016-04-07 14:30:38.419 HelloCordova[8269:377355] Done updating
2016-04-07 14:30:38.419 HelloCordova[8269:377355] getUser() data: [object Object]
2016-04-07 14:30:38.420 HelloCordova[8269:377355] $scope.load() data: [object Object]
2016-04-07 14:30:41.198 HelloCordova[8269:377355] Refresh Tracks Started

在最后一行之后,没有其他事情发生,应用程序被挂起。忽略以上几行,它们与之前的问题有关。

我不确定发生了什么,它应该从Spotify中检索一些跟踪数据,但是这个逻辑都是从$scope.getTracks()函数中调用的,它永远不会被调用。我做错了什么?

修改:以下是来自SpotifyService.getTrack的{​​{1}}函数:

Services.js

1 个答案:

答案 0 :(得分:1)

假设SpotifyService.getTrack返回一个promise,$scope.getTracks函数返回一个promise数组。我认为您正在寻找的是在收到所有曲目后分配$scope.tracks。试试这个:

$q.all($scope.getTracks()).then(function (data) {
  console.log('Getting tracks');
  $scope.tracks = data;
})
.catch(function (error) {
  console.log(error);
});