2017-04-25 12 views
-4

ループ中にオブジェクトをループしようとしていますが、結果を得ることができません。実際には、内部で関数を実行した後にカウンタの値がインクリメントしていると仮定していましたループ...しかし、カウンタの値は、関数の実行前に、増加を取得している間に...私はここに whileループが関数実行まで待機していません

は私test.tsです...なぜこれが起こっている届かない

export class HelloIonicPage { 
_i: number = 0; 
barcode(index, pickuplist) { 
    BarcodeScanner.scan() 
    .then((barcodeData) => { 
     if (barcodeData.cancelled) { 
     alert("User cancelled the action!"); 
     return false; 
     } 
     this.bartxt = barcodeData.text; 
     if (this.bartxt != '') { 
     this.authservice.testFunction(this.bartxt) 
      .subscribe(data => { 
      if (data !== '') { 
       alert("Scanned successfully!"); 
       alert(this._i);      //here the value of i should be 0, but it showing 2 
       if (this._i == (this.totalorders - 1)) { 
       alert(this._i + " _index"); 
       this.finalacceptvendor(index, pickuplist); 
       } else { 
       alert(this._i + " _index"); 
       this.vendorbarcode(index, pickuplist); 
       } 
      } else { 
       this.vendorbarcode(index, pickuplist); 
       alert(Wrong QR Code); 
      } 
      }); 
     } 
     }); 
    } 
vendorbarcode(index, pickuplist) { 
    this.totalorders = 2; 
    while (this._i < this.totalorders) { 
     alert(this._i + "_index");   //here the value of i = 0 
     this.barcode(index, pickuplist); 
     this._i = this._i + 1; 
    } 
    } 
    } 

Iここ2日からここにこだわっています... mkeさんがこの問題をソートするのを助けてください。

+0

なぜ結果が得られませんか? – mast3rd3mon

+1

関数の目的を説明できますか?メンバレベルでカウンタを保存することは、間違ったアプローチに見えます。私が収集したものから、あなたがスキャンするアイテムのリストを持っているように見えます。スキャンされたら、再度スキャンする必要はありません。カウンターを維持しようとするのではなく、リストからアイテムを削除するだけです。はるかに簡単にする必要があります。 – Brian

+0

vendorbarcodeを非同期の関数にしないと、実行しようとしていることはできません。 whileループは、非同期アクションでは待機せずに、非同期/待機なしで続行します。 –

答えて

0

私はvendorbarcode(index、pickuplist)を以下のようにasyn関数にすることで問題を解決しました:

public vendorbarcode = function (index, pickuplist) { 
    this.totalorders = this.pickuplist[index].Total_Orders; 
    this.vendorid = this.pickuplist[index].VendorId; 
    // async stuff, like fetching users from server, returning a response 
    this.authservice.getorderidsFunction(this.vendorid) 
     .subscribe(data => { 
     this.orderids = data[this._i].OrderId; 
     while (this._i < data.length) { 
      this.barcode(index, pickuplist) 
      .then(function (response) { 
      }); 
     } 
     }); 
    } 
関連する問題