在使用rxjs的Angular 2中,我试图将Promise转换为Observable.由于许多在线指南的显示我用fromPromise的Observable.哪个抛出错误:
Property 'fromPromise' does not exist on type 'typeof Observable'.
Run Code Online (Sandbox Code Playgroud)
Observable导入如下:
import { Observable } from "rxjs/Observable";
Run Code Online (Sandbox Code Playgroud)
尝试fromPromise像其他运算符一样导入会导致错误:
import 'rxjs/add/operator/fromPromise';
Run Code Online (Sandbox Code Playgroud)
即使我压制打字稿错误,它仍然会导致错误:
(<any>Observable).fromPromise
Run Code Online (Sandbox Code Playgroud)
错误:
Uncaught (in promise): TypeError: __WEBPACK_IMPORTED_MODULE_3_rxjs_Observable__.Observable.fromPromise is not a function
Run Code Online (Sandbox Code Playgroud)
rxjs repo 在这里报告了一些类似的问题,但也没有解决方案.
我在Typescript中有一个抽象基类,如下所示:
import {Http, Headers, Response} from 'angular2/http';
export abstract class SomeService {
constructor(private http:Http) {}
protected post(path:string, data:Object) {
let stringifiedData = JSON.stringify(data);
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
this.http.post(`http://api.example.com/${path}`, stringifiedData, { headers })
.map(res => res.json())
.subscribe(obj => console.log(obj));
}
}
Run Code Online (Sandbox Code Playgroud)
它完美地运作.但是,Typescript编译器正在抱怨.map(res => res.json()).我一直收到这个错误:
ERROR in ./src/app/components/shared/something/some.abstract.service.ts
(13,29): error TS2339: Property 'json' does not exist on type '{}'.
Run Code Online (Sandbox Code Playgroud)
我按照角度2文档中的示例进行操作,它可以工作.我只是厌倦了盯着这个错误.我错过了什么吗?
我有这样的功能,它只是上传带有 xhr 请求的图像:
public uploadAvatar(avatarFile, callback) {
return new Promise((resolve, reject) => {
let formData: any = new FormData();
let url = 'avatar';
let imgArr = "avatar";
let xhr = new XMLHttpRequest();
formData.append(imgArr, avatarFile, avatarFile.name);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
if (xhr.status == 200) {
resolve(JSON.parse(xhr.response));
callback('success');
} else {
reject(xhr.response);
callback('error');
}
}
};
xhr.open("POST", environment.baseUrl + url, true);
xhr.setRequestHeader('Auth', this._auth.getToken());
xhr.send(formData);
});
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能返回 Observable insted Promise?