[英]angularjs strange array behaviour, probably related to asynchronous execution?
難以復制,因此我將嘗試解釋一下。
在angularjs的工廠中,我有一個像這樣的函數
angular.module('my').factory('Database', ['$window', 'Raw', function($window, Raw) {
return {
read: function() {
其中Raw是下面定義的另一個工廠,該工廠返回數據字符串
然后我這樣做:
var lines = [];
lines = Raw.data.split("*");
這給了我一個字符串數組。
奇怪的行為是由於未定義lines [0],因此會產生錯誤。 我可以通過添加警報來解決此錯誤
var lines = [];
lines = Raw.data.split("*");
alert(lines[0])
這向我顯示了預期的字符串。 但是,如果我改用console.log命令,它將無法正常工作。
發生什么了??
干杯,
聽起來您Raw.data
通過異步方式獲取Raw.data
的,當您嘗試拆分它時,它仍然是undefined
。
如果Raw.data
返回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;
}
}
}]);
演示小提琴
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.