2016-12-04 18 views
0

$scope.showDefaultStateはif文に設定されているにもかかわらず未定義に評価されるのはなぜですか?

どのようにして未定義に評価されずに「真」の値を取得するのですか?

// Determine if user has signed up in past 
$cordovaNativeStorage.getItem("userPicture").then(function (value) { 
    $scope.userInfo.userPicture = value; 
}, function (error) { 
    $log.log(error); 
}); 
$cordovaNativeStorage.getItem("userProfile").then(function (value) { 
    $scope.userInfo.userProfile = value; 
}, function (error) { 
    $log.log(error); 
}); 
$cordovaNativeStorage.getItem("userSelectedCategories").then(function (value) { 
    $scope.userInfo.userSelectedCategories = value; 
}, function (error) { 
    $log.log(error); 
}); 

if($scope.userInfo.userPicture != null && $scope.userInfo.userProfile != null && $scope.userInfo.userSelectedCategories != null) { 
    $scope.showDefaultState = true; 
} 

console.log($scope.showDefaultState); 

if($scope.showDefaultState == null) { 

// stuff goes here... the code in this block always runs 
} 
+0

そのおそらくヌル約束がshowDefaultState = trueを設定した場合の条件が実行される時点で解決していないため。タイムアウト値を与えてから、それが役立つかどうか確認してみてください。 –

+0

私に戻ってくれてありがとう。私はタイムアウトを使用しないことを好むでしょう、他の選択肢がありますか? – methuselah

+1

@clever_bassiいいえ、それは解決する約束を待つ良い方法ではありません。あなたは 'Promise.all'のようなものにあなたの関数を連鎖させなければなりません。解決したらあなたの' showDefaultState'がセットされます。 –

答えて

4

約束を組み合わせて、すべてを一度に評価することができます。 $q

var p1 = $cordovaNativeStorage.getItem("userPicture"); 
var p2 = $cordovaNativeStorage.getItem("userProfile"); 
var p3 = $cordovaNativeStorage.getItem("userSelectedCategories"); 

$q.all([p1, p2, p3]).then(function (data) { 
    $scope.userInfo.userPicture = data[0]; 
    $scope.userInfo.userProfile = data[1]; ; 
    $scope.userInfo.userSelectedCategories = data[2]; 
    if ($scope.userInfo.userPicture != null && $scope.userInfo.userProfile != null && $scope.userInfo.userSelectedCategories != null) { 
     $scope.showDefaultState = true; 
    } 

}).catch (function (err) { 
    console.log(err.message); // some coding error in handling happened 
}); 
関連する問題