2

我正在从事 ionic 2 项目。我能够返回设备/手机中的所有联系人。但是我使用了由于一次请求而性能非常慢的承诺代码。现在,我想将该承诺代码更改为可观察的。请帮我解决这个问题。

findContact(searchKey){
    if(searchKey.target.value == "" || searchKey.target.value == undefined || searchKey.target.value == null){
        this.contactSelected = false;
    } else{
        this.contactSelected = true;
    }
    let options = {
        multiple: true,
        hasPhoneNumber: true,
        filter: searchKey.target.value
    }
    let cantactFields = ['displayName', 'phoneNumbers'];
    Contacts.find(cantactFields, options).then(res => {
            this.contactResults = res;
    }, (er) => {
        console.log(er);
    })
}

Contacts.find()是我使用承诺的方法。而且此方法返回联系人的速度非常慢。

4

1 回答 1

3

你可以用Observable.fromPromiseobservable 来包装你的 promise。

可以做这样的事情来将你的承诺包装在 observable 中。

findContact(searchKey){
    if(searchKey.target.value == "" || searchKey.target.value == undefined || searchKey.target.value == null){
        this.contactSelected = false;
    } else{
        this.contactSelected = true;
    }
    let options = {
        multiple: true,
        hasPhoneNumber: true,
        filter: searchKey.target.value
    }
    let cantactFields = ['displayName', 'phoneNumbers'];
    var promise =Contacts.find(cantactFields, options).then(res => {
        this.contactResults = res;
    }, (er) => {
        console.log(er);
    })
    return PromiseObservable.create(promise); //     Observable.fromPromise(promise)
}

希望这可以帮助

于 2016-11-21T06:25:51.483 回答