2017-09-18 16 views
0

私は、変数の値を0に戻しますが、変数の内部で変数を使用したい場合は、関数内の変数の値を変更すると変更されます。JSのメソッドの外部変数の値を保持する方法は?

私は変数の値を関数の外に保つ方法を知る必要があります。ここで

は私の現在のコードです:

function getCarsWithNoStatus() { 
    var statusName = []; 
// We set the total counters for the areas 
    var totals = {bodyshop: 0, paintshop: 0, assembly: 0}; 
// var tmpTotal = 0; 


     WebApiFactory.getNoStatusOrders(bodyShop1).then(function(statusMonData) { 
      for(var statusProperty in statusMonData.NoStatusOrders) { 
       statusName = statusProperty; 
       for (var j = 0; j < statusMonData.NoStatusOrders[statusName].length; j++) { 
        if (typeof statusMonData.NoStatusOrders[statusProperty][j] !== null) { 
         totals.bodyshop++; 
         console.log(totals.bodyshop); //here shows correct value 
        } 
       } 
      } 
     }); 
     console.log(totals.bodyshop); //value returns to 0 

    } 
+2

'totals'を' getCarsWithNoStatus() 'の外側に宣言してみませんか? – davidxxx

+1

問題は、あなたのconsole.log(totals.bodyshop)です。それは外にあり、約束が返される前に実行されます。 – CodeHacker

+0

最初に出力するconsole.logはどれですか? WebApiFactory.getNoStatusOrders(bodyShop1)はajaxコールですか? – Amit

答えて

0

totalsの値は非同期コードに変更されているので、非同期コードが終了する前に、あなたのconsole.logが実行されています。このようなコードで作業するときは、通常、非同期コードの実行が終了した後にPromiseを返すか、callbackを実行します。

+0

コールバックはどのように実行しますか?この場合は? –

関連する問題