2017-02-06 7 views
1

私は1つの関数を持っていますが、関数の外にlastlockerbalanceを出力する必要があります。関数の外に変数を取得する

var getlockerbalance = function() { 
    $http.get("php/selectLOCKERBALANCE.php").success(function(lockerbalance) { 
     $scope.lockerbalance1 = lockerbalance; 
     var lastlockerbalance = $scope.lockerbalance1[0].LOCKERBALANCE; 
     console.log(lastlockerbalance); 
    }); 
}; 
console.log(lastlockerbalance); 

「lastlockerbalance is undefined」というエラーメッセージが表示されます。

答えて

0

promiseを返し、then()を使用するか、関数にコールバックを渡すことができます。

約束

function getlockerbalance() { 
    return $http.get("php/selectLOCKERBALANCE.php").success(function(lockerbalance) { 
     $scope.lockerbalance1 = lockerbalance; 
     var lastlockerbalance = $scope.lockerbalance1[0].LOCKERBALANCE; 
     return lastlockerbalance; 
    }); 
}; 

getlockerbalance().then(function(result){ 
    console.log(result); 
}); 

コールバック

var getlockerbalance = function(callback) { 
    $http.get("php/selectLOCKERBALANCE.php").success(function(lockerbalance) { 
     $scope.lockerbalance1 = lockerbalance; 
     var lastlockerbalance = $scope.lockerbalance1[0].LOCKERBALANCE; 
     callback(lastlockerbalance); 
    }); 
}; 

function printBalance(balance) { 
    console.log(balance); 
} 

getlockerbalance(printBalance); 
+0

あなたの約束の例は、外側のスコープで 'lastlockerbalance'に割り当てる必要があります:' lastlockerbalance = getlockerbalance() 'それは値と約束を区別するために別の名前を付ける方が良いかもしれません。 – Duncan

+0

ええ、私はリファクタリングしました。しかし、彼は考えを得るべきである。 –

2

できません。 .success()コールバックは、第2のconsole.log()関数が呼び出された時点でも呼び出されていません。実際には、$http.get()要求の呼び出しは、getlockerbalance()関数が返るまで要求を送信しません。

あなたが行う必要があるのは、コールバック内の値を使用するコードを移動することです。

+0

私はあなたに同意しないが、(窓).lastlockerbalanceは(ないOPがそれを印刷している時)に設定されます。もちろん、コールバック内で移動する必要があります。 – GuyT

関連する問題