2017-06-23 4 views
1

だから私はLogin.tsjavascriptの約束の使い方は? (イオン性およびコルドバ関連)

export class LoginPage { 
    public version:string; 
    constructor(public navCtrl: NavController, public navParams: NavParams, private appVersion: AppVersion) { 
    this.appVersion.getVersionNumber().then((val) => { 
     this.version = val; 
    }).catch((val) => { 
     console.log(val); 
    }); 
    } 
} 

そして、私のHTMLに以下している私はこのような何か持ってLogin.htmlです:私は、HTML上で、以下の結果をレンダリングしたい

<p>{{version}}</p> 

を:

<p>appVersion.getAppName() appVersion.getPackageName() appVersion.getVersionCode() appVersion.getVersionNumer()</p> 

このように表示されます(出力形式についてはわかりませんが、このようなもの):

<p>MyApp 1.0 1.0.1 1.0.1 100</p> 

これは、例えば、同期呼び出した場合、これは非常に簡単になります:

constructor(public navCtrl: NavController, public navParams: NavParams, private appVersion: AppVersion) { 
    this.version = appVersion.getAppName(); 
    this.version += " " + appVersion.getPackageName(); 
    this.version += " " + appVersion.getVersionCode(); 
    this.version += " " + appVersion.getVersionNumer(); 
    } 

しかし、私はする必要があります値を取得するので、残念ながら結果は約束をしています約束の結果を設定してください。これどうやってするの?私は連鎖約束でそれをすることができると思っていますが、間違っているように見えます。

constructor(public navCtrl: NavController, public navParams: NavParams, private appVersion: AppVersion) { 
    this.appVersion.getAppName().then((val) => { 
     this.version = val; 
     this.appVersion.getPackageName().then((val) => { 
     this.version += " " + val; 
     this.appVersion.getVersionCode().then((val) => { 
      this.version += " " + val; 
      this.appVersion.getVersionNumber().then((val) => { 
      this.version += " " + val; 
      }); 
     }); 
     }); 
    }).catch((val) => { 
     console.log(val); 
    }); 
} 

正しい方法はありますか?

+1

あなたは 'Promise.all'と考えましたか? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all – Hamms

答えて

1

複数の方法があります。すべての結果を同時に表示するかどうかによって異なります。すべての結果を同時に取得するには、Promise.allを使用してください。

constructor(public navCtrl: NavController, public navParams: NavParams, private appVersion: AppVersion) { 
    Promise.all([ 
    this.appVersion.getAppName(), 
    this.appVersion.getPackageName(), 
    this.appVersion.getVersionCode(), 
    this.appVersion.getVersionNumber(), 
    ]).then((results) => { 
    this.version = results.join(' '); 
    }).catch((err) => { 
    console.log(err); 
    }); 
} 

Promise.allはすべての約束事の配列を返します。あなたはスペースでそれらに参加したり、好きなようにそれらを配置することができます。