Javascript 函数在解析时返回承诺拒绝

Javascript 函数在解析时返回承诺拒绝,javascript,angularjs,Javascript,Angularjs,我有一个angularjs控制器和工厂 因此,我的目的是根据promise结果管理所有消息错误。这意味着在检查resolve factory函数中的一些错误值后,在控制器中接收拒绝 我试着这样做,但不起作用: factory.js var mediaRecent; function getMediaByUserName(user) { return $http.get('https://www.instagram.com/' + user + '/media') .then(func

我有一个
angularjs
控制器和工厂

因此,我的目的是根据promise结果管理所有消息错误。这意味着在检查resolve factory函数中的一些错误值后,在控制器中接收拒绝

我试着这样做,但不起作用:

factory.js

var mediaRecent;
function getMediaByUserName(user) {
  return $http.get('https://www.instagram.com/' + user + '/media')
    .then(function (response) {
      if (response.data.items.length === 0) {
        // I want here to cause a reject in the controller function
        return new Error('This user is not public');
      }
      mediaRecent = response.data.items;
    })
    .catch(function (error) {
      return new Error('There was a problem looking to that user');
    });
}
instagramFactory.getMediaByUserName(vm.name)
  .then(function () {
    $state.go('instagramMediaRecent');
  })
  .catch(function (error) {
    vm.error = error.message;
  });
controller.js

var mediaRecent;
function getMediaByUserName(user) {
  return $http.get('https://www.instagram.com/' + user + '/media')
    .then(function (response) {
      if (response.data.items.length === 0) {
        // I want here to cause a reject in the controller function
        return new Error('This user is not public');
      }
      mediaRecent = response.data.items;
    })
    .catch(function (error) {
      return new Error('There was a problem looking to that user');
    });
}
instagramFactory.getMediaByUserName(vm.name)
  .then(function () {
    $state.go('instagramMediaRecent');
  })
  .catch(function (error) {
    vm.error = error.message;
  });

事实上你打了两次电话给promise。因此,您只能在控制器或工厂中调用它

简单方法

工厂:

function getMediaByUserName(user) {
  return $http.get('https://www.instagram.com/' + user + '/media');
}
控制器:

instagramFactory.getMediaByUserName(vm.name)
  .then(function () {
    if (response.data.items.length === 0) {
      // I want here to cause a reject in the controller function
      return new Error('This user is not public');
    }
    var mediaRecent = response.data.items;
    $state.go('instagramMediaRecent');
  })
  .catch(function (error) {
    vm.error = new Error('There was a problem looking to that user');
  });

尝试抛出错误,而不是返回错误。