我已经在工厂内部实现了一个似乎有效的 promise 。然而我似乎正在返回函数......而不是函数的乘积。如果我控制台日志,我会看到控制台中打印出的完整功能而不是数据。
我是否搞乱了数据返回的方式?
对象 {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 */
});
感谢您的宝贵时间。
最佳答案
您将函数分配给 $scope.liveScores
而不是结果。
您可以像这样使用 Promise:
importIO.data().then(function(result){
$scope.liveScores = result;
console.log($scope.liveScores);
});
这意味着您执行数据函数,然后在“data”方法完成后,将结果分配给liveScores
。
关于javascript - 工厂返回返回函数,而不是函数的产物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30088585/