簡體   English   中英

angularjs奇怪的數組行為,可能與異步執行有關?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM