2016-09-21 32 views
0

我想檢查,如果給定的clientName存在於Observable Collection中,但是在異步運行的原因中,我根本沒有得到「false」返回值。如何改變我的功能同步 - 我想不使用回調 - 剛剛返回真/假在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

我看到三個選項:

  1. 使checkIfClientNameIsUnique返回承諾,那麼你 可以使用它例如checkIfClientNameIsUnique(name).then(isUnique => {...})
  2. 將所有客戶端加載到初始狀態的數組。我想你有ClientsService那裏你可以把客戶端數組,然後你的 checkIfClientNameIsUnique方法可以同步並使用已經加載的 客戶端數組。

3.如果你發射到ES6你可以使用異步等待關鍵字,它會看起來像這樣。

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 body轉換爲Promise?我的問題是將this.getAll()參數發送到Promise主體 – Avocado20

+0

我在我的答案中添加了示例,讓我知道它的工作原理:) –

+0

是否有任何方法使它在沒有ECMA6的情況下爲異步?或者像你在第1點中提到的那樣使用它? – Avocado20