【问题标题】:How to convert a promise to an observable?如何将 Promise 转换为 Observable?
【发布时间】:2017-04-04 10:55:29
【问题描述】:

我正在从事 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() 是我使用 Promise 的方法。而且这个方法返回联系人的速度很慢。

【问题讨论】:

  • 您可能遇到了 XY 问题,如果方法“慢”,则可观察对象无能为力。 Promise 和 observables 都能够同时处理多个请求。而且问题没有显示相关代码。

标签: angular ionic2 angular2-observables


【解决方案1】:

您可以使用 Observable.fromPromise 将您的承诺包装在 observable 中。

可以做这样的事情来将你的承诺包装在 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)
}

希望对您有所帮助

【讨论】:

  • 我认为它也会产生相同的结果。因为您是通过承诺发送请求。然后你将响应返回到 observable 中。我说的对吗?
  • 是的。它将解决承诺,然后将其转换为可观察的。如果你想使用 observables,那么你必须更新服务中的 API。
  • 但这是预定义的方法。 ionicframework.com/docs/v2/native/contacts 请参阅此链接以了解该方法。如果您有任何其他想法,请与我分享。
猜你喜欢
  • 2021-12-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 2018-02-19
  • 2021-11-10
  • 2018-08-22
相关资源
最近更新 更多