Angular.js承诺返回[Object object]

时间:2015-03-17 17:23:38

标签: angularjs angularjs-service

我正在调用一个返回服务中对象的promise,但不知何故在控制器中丢失了。

从我的控制器我打电话:

dataService.getSpanishOverviewByID(newItem, api) 
.then(getSpanishOverviewByIDSuccess)
.catch(errorCallback);

在我的服务中,似乎一切正常:

function getSpanishOverviewByID(newItem, api) { 
console.log(newItem + " / " + api);
return $http({
  method: 'GET',
  url: '/api/' + api,
  newItem: newItem
})
.then(getSpanishByIDSuccess)
.catch(sendGetVolunteerError);
}


function getSpanishByIDSuccess(response) {
    var log = [];  
    angular.forEach(response.data, function(item, key) {
          console.log('I found this!' + response.config.newItem + " " + item.title);
          if(item.title == response.config.newItem){
            console.log('matching ' + item);
            this.push(item);
        }
    }, log);
    console.log(log);
    return log; 
  }

console.log(log)返回一个对象: enter image description here

由于某些原因,这不会正确地传递给控制器​​:

function getSpanishOverviewByIDSuccess(data) {
  $rootScope.newItem = data;
  console.log('brought back ' + data);
}

console.log('brought back ' + data);返回:

brought back [object Object]

我不确定为什么会出现这个错误。似乎promise应该传递console.log(log);

中返回的数据

1 个答案:

答案 0 :(得分:5)

这是Javascript字符串连接的怪癖。如果您自己log一个对象,控制台将以您在上面截图的友好方式显示整个对象。但是,如果您log字符串加上一个对象,Javascript解释器会将对象强制转换为[object Object],而不是正确地对其进行字符串化。对象本身可能仍然很好; log语句只是给你一个类型的版本。

这里最简单的解决方案是:

console.log('brought back');
console.log(data);

或者:

console.log('brought back', data);

然后,您的识别字符串和具有可视属性层次结构的完整对象将被单独记录,您将避免字符串连接问题,并且一切都应该看起来很好。