我在工厂内实施了一项似乎有效的承诺。但是我似乎正在返回功能...而不是功能的产物。如果我控制台日志,我看到在控制台中打印出完整的功能而不是数据。
我是否搞砸了数据返回的方式?
对象{data:function} < - 来自控制台日志
latestScores.factory('importIO', function($q) {
return {
data: function(){
var deferred = $q.defer()
setTimeout(function() {
var io2 = new importio("xxx", "xxx", "import.io");
io2.connect(function(connected) {
if (!connected) {
console.error("Unable to connect");
return;
}
var data;
var callback = function(finished, message) {
if (message.type == "DISCONNECT") {
console.error("The query was cancelled as the client was disconnected");
deferred.reject(new Error('No name specified for greeting'))
}
if (message.type == "MESSAGE") {
if (message.data.hasOwnProperty("errorType")) {
console.error("Got an error!", message.data);
} else {
data = message.data.results;
deferred.resolve(data)
}
}
if (finished) {
data = message.data.results;
deferred.resolve(data)
}
};
io2.query({
"connectorGuids": [
"xxx"
],
}, callback);
});
}, delay)
return deferred.promise
}
}
});
latestScores.controller('ScoresController', function($scope, importIO) {
$scope.liveScores = importIO.data;
console.log($scope.liveScores); /* returns a console log of function not data */
});
感谢您的时间。
答案 0 :(得分:2)
您正在将功能分配给$scope.liveScores
而不是结果。
你可以使用这样的承诺:
importIO.data().then(function(result){
$scope.liveScores = result;
console.log($scope.liveScores);
});
这意味着您执行数据功能,然后在“数据”方法完成后,将结果分配给liveScores
。