Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular 2.0-将承诺链转换为可观测值_Javascript_Angularjs_Reactive Programming_Angular_Rxjs - Fatal编程技术网

Javascript Angular 2.0-将承诺链转换为可观测值

Javascript Angular 2.0-将承诺链转换为可观测值,javascript,angularjs,reactive-programming,angular,rxjs,Javascript,Angularjs,Reactive Programming,Angular,Rxjs,我正在将NG1.X服务转换为NG2.0 我的NG 1.X服务具有承诺链接(简化): 我想将search服务转换为Angular 2.0服务,使用http并返回Observable。我更喜欢将getAccessToken服务保持不变,作为一个返回承诺的NG1.X服务 我正在考虑在旧的“承诺”服务上使用observeble.fromPromise 我怎么做?我怎么才能把那两个锁起来 编辑: 我只是想澄清一下,我希望它是这样的: dataService.search = function(search

我正在将NG1.X服务转换为NG2.0

我的NG 1.X服务具有承诺链接(简化):

我想将
search
服务转换为Angular 2.0服务,使用
http
并返回
Observable
。我更喜欢将
getAccessToken
服务保持不变,作为一个返回承诺的NG1.X服务

我正在考虑在旧的“承诺”服务上使用
observeble.fromPromise

我怎么做?我怎么才能把那两个锁起来

编辑

我只是想澄清一下,我希望它是这样的:

dataService.search = function(searchExp) {
 return this.getAccessToken()
        .then(function(accesstoken) {
           //Here I want to use:
           // this.http.get(url).subscribe(() => ...)
          });
        };
dataService.search = function(searchExp) {

    var promise = new Promise((resolve, reject) => {
        this.getAccessToken()
            .then(accesstoken => {
                return this.http.get('data.json')
                    .map(response => response.json())
                    .subscribe(data => resolve(data), err => reject(err))
            })
    });

    return PromiseObservable.create(promise); // Observable.fromPromise(promise)
};

您应该使
search
方法返回可观察对象。大概是这样的:

dataService.search = function(searchExp) {
 return this.getAccessToken()
        .then(function(accesstoken) {
           //Here I want to use:
           // this.http.get(url).subscribe(() => ...)
          });
        };
dataService.search = function(searchExp) {

    var promise = new Promise((resolve, reject) => {
        this.getAccessToken()
            .then(accesstoken => {
                return this.http.get('data.json')
                    .map(response => response.json())
                    .subscribe(data => resolve(data), err => reject(err))
            })
    });

    return PromiseObservable.create(promise); // Observable.fromPromise(promise)
};

我将@dfsq的Plunker转换为beta.0<代码>映射()如果不导入它,它似乎不再可用(但我们这里不需要它)

从'angular2/core'导入{Component,Injectable};
从'angular2/HTTP'导入{HTTP_提供者,HTTP};
从“rxjs/observable/fromPromiseObservable”导入{PromiseObservable};
@可注射()
导出类数据服务{
构造函数(private _http:http,private _accessService:accessService){}
搜索(searchExp){
var承诺=新承诺((解决、拒绝)=>{
这是.\u accessService.getAccessToken()//有关accessService,请参阅Plunker
。然后(accessToken=>{
返回此值。_http.get('data.json')//在此处使用accessToken
.subscribe(res=>resolve(res.json()),err=>reject(err));
});
});
返回可观察的承诺。创建(承诺);
}
}
@组成部分({
选择器:“我的应用程序”,
提供者:[HTTP\U提供者、AccessService、DataService],
模板:`Data loaded{{Data | json}}
`
})
导出类AppComponent{
资料:有;
构造函数(私有_dataService:dataService){
console.clear();
} 
恩戈尼尼特(){
此.\u dataService.search('test'))
.订阅(res=>{
这个数据=res;
});
}
}

beta.0可以观察到。fromPromise(dataService.search)?这是显而易见的。我的问题是如何从函数返回这个值?我锁不住它!谢谢你的回答。我的问题是如何将第二个承诺更改为Angular 2.0
http
,它使用Observable。您是指内部$http吗?只需将Observable作为内部承诺返回即可。然后返回Observable.fromPromise(promise)。请参阅更新的答案。这很有趣。我试过了,但是在调用我拥有的服务的组件中:`dataService.search(data.subscribe((res)=>//res这里是一个可观察的!!)是的,我的版本也不起作用。我做了一个似乎效果更好的实验。检查更新版本。这里还有一个演示: