2016-09-21 10 views
0

Observable CollectionにclientNameが指定されていても、非同期で実行されているため、「偽」の戻り値はまったくありません。どのように同期するように私の機能を変換するために - 私はコールバックを使用しない希望 - ちょうどtrueを返す/偽Observable syncで検索する

checkIfClientNameIsUnique(clientName: string): boolean { 
    var isUnique = true; 
    this.getAll() 
     .subscribe(clients => { 
      clients.forEach(client => { 
       if (clientName == client.name) { 
        isUnique = false 
       } 
      }) 
     }); 
    return isUnique 
} 

答えて

0

私は3つのオプションを参照してください。

  1. をcheckIfClientNameIsUniqueは、あなた がそれを使用することができます約束を返すようにしますcheckIfClientNameIsUnique(name).then(isUnique => {...})
  2. すべてのクライアントを初期状態でアレイにロードします。私はクライアントの配列をクライアントの配列に置くことができるClientsServiceを持っているとします。 checkIfClientNameIsUniqueメソッドを同期させて、既にロードされた クライアント配列を使用できます。

3. ES6に送信すると、asyncキーワードを使用することができ、このようになります。

checkIfClientNameIsUnique(clientName: string): Promise<boolean> { 
    return new Promise((resolve, reject) => { 
     this.getAll() 
      .subscribe(clients => { 
       for (let client of clients) { 
        if (clientName == client.name) { 
         resolve(false); 
         break; 
        } 
       } 
       resolve(true); 
      }); 
    }); 
} 
// ... 

async main() { 
    let isUnique = await checkIfClientNameIsUnique(name); 
} 
+0

checkIfClientNameIsUnique本文をPromiseに変換する方法はありますか?私が持っている問題は、Promise本体にthis.getAll()パラメータを送信することです – Avocado20

+0

私は私の答えに私が例を追加しました、それが働くことを知らせてください:) –

+0

は、ECMA6なしで非同期にする方法はありますか?または、ポイント1で言及したように使用しますか? – Avocado20