在Observable sync

时间:2016-09-21 08:14:38

标签: javascript asynchronous typescript observable

我想检查一下,如果observable Collection中存在clientName,但由于异步运行,我根本不会得到“false”返回。如何将我的函数转换为同步 - 我不想使用回调 - 只返回true / false

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

1 个答案:

答案 0 :(得分:0)

我看到三个选项:

  1. make checkIfClientNameIsUnique然后返回Promise 可以使用它像checkIfClientNameIsUnique(name).then(isUnique => {...})
  2. 在初始状态下将所有客户端加载到阵列。我想你有ClientsService,你可以把客户端数组,然后你的 checkIfClientNameIsUnique方法可以同步并使用已经加载的方法 客户数组。
  3. 3.如果您向ES6发射,则可以使用async await关键字,它将如下所示。

    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);
    }