难以重现,所以我会尝试解释。
在angularjs的工厂内,我有一个像这样的功能
angular.module('my').factory('Database', ['$window', 'Raw', function($window, Raw) {
return {
read: function() {
其中Raw是下面定义的另一个工厂,它返回一个数据字符串
然后我这样做:
var lines = [];
lines = Raw.data.split("*");
给了我一个字符串数组。
奇怪的行为是它在行[0]未定义时给出错误。 我可以通过添加警报来解决此错误
var lines = [];
lines = Raw.data.split("*");
alert(lines[0])
显示了预期的字符串。但是如果我改为使用console.log命令它就不起作用。
那么,发生了什么?
干杯,
答案 0 :(得分:1)
听起来像是通过异步方式获得Raw.data
,当您尝试拆分它时,它仍然是undefined
。
如果Raw.data
返回承诺,请使用then()
回调,例如:
var myModule = angular.module('myModule', []);
myModule.controller('myController', ['$scope', 'Database', function($scope, Database) {
$scope.text = Database.read();
}]);
myModule.factory('Database', ['$window', 'Raw', '$q', function($window, Raw, $q) {
return {
read: function() {
var deferred=$q.defer();
Raw.data().then(function(data) {
lines = data.split("*");
deferred.resolve(lines);
});
return deferred.promise;
}
}
}]);
myModule.factory('Raw', ['$window', '$q', function($window, $q) {
return {
data: function() {
var data = "blah * blah";
var deferred = $q.defer();
deferred.resolve(data);
return deferred.promise;
}
}
}]);
演示 Fiddle