TypeError: _rxjs.Observable.fromPromise is not a function
TypeError: _rxjs.Observable.fromPromise is not a function
我在React Native
中使用rxjs
。我调用 Observable.fromPromise(storage.load({key: key})).map(() => value);
显示错误。
我的 rxjs 版本:
"rxjs": "^6.5.3",
"rxjs-compat": "^6.5.3",
我分三个步骤。
第一步:
rxInit().flatMap(() => {
console.log('I can not see the console log');
return rxInit()
}).subscribe(() => {
console.log('I can not see the console log');
// some code...
})
步骤 2 rxInit():
import { Observable } from 'rxjs';
rxInit() {
console.log('I can see the console log')
return StorageService.shared.get('deviceuuid').flatMap((deviceuuid) => {
console.log('I can't not see the console log')
if (deviceuuid == null) {
return StorageService.shared.set('deviceuuid', this.deviceuuid);
} else {
return Observable.of(this.deviceuuid);
}
}).do((deviceuuid) => {
// some code...
})
}
关于 get() 的第 3 步:
import { Observable } from 'rxjs';
import Storage from 'react-native-storage';
import AsyncStorage from '@react-native-community/async-storage';
let storage = new Storage({
size: 1000,
storageBackend: AsyncStorage,
defaultExpires: null,
})
export default class StorageService {
set(key, value) {
console.log('StorageService set');
return Observable.fromPromise(storage.save({ key: key, data: value })).map(() => value);
}
get(key) {
console.log('It is a ', storage.load({key: key})); // It is a Promise
return Observable.fromPromise(storage.load({key: key})).map(() => value);
}
remove(key) {
return Observable.fromPromise(storage.remove({key: key})).catch(() => Observable.of(null))
}
}
StorageService.shared = new StorageService();
我正在寻找答案,有人说是因为rxjs 6.0以上,所以我尝试使用
import { from } from 'rxjs';
return from(storage.load({key: key})).map(() => value);
它仍然显示
TypeError: _rxjs.from.fromPromise is not a function
或
_rxjs.from().map is not a function.
如有任何帮助,我们将不胜感激。
我知道评论中已经有一些提示,但我会提供一个答案,为答案提供更多背景信息。
对于 RxJS 6,在使用 RxJS 运算符(例如 map 和 switchMap)时的做法是使用 pipe
实用程序,而不是将运算符点链接起来。您可以在 here.
阅读更多关于变化的信息
以您的示例为基础,例如,如果您想同时使用 map
和 filter
运算符,而不是像
这样的操作
from(storage.load({key: key})).map(() => value).filter(value => value)
RxJS 6 将要求您改为这样做:
from(storage.load({key: key}))
.pipe(
map(() => value),
filter(value => value),
.subscribe(res => {
console.log(res);
// do the rest here
})
我在React Native
中使用rxjs
。我调用 Observable.fromPromise(storage.load({key: key})).map(() => value);
显示错误。
我的 rxjs 版本:
"rxjs": "^6.5.3",
"rxjs-compat": "^6.5.3",
我分三个步骤。
第一步:
rxInit().flatMap(() => {
console.log('I can not see the console log');
return rxInit()
}).subscribe(() => {
console.log('I can not see the console log');
// some code...
})
步骤 2 rxInit():
import { Observable } from 'rxjs';
rxInit() {
console.log('I can see the console log')
return StorageService.shared.get('deviceuuid').flatMap((deviceuuid) => {
console.log('I can't not see the console log')
if (deviceuuid == null) {
return StorageService.shared.set('deviceuuid', this.deviceuuid);
} else {
return Observable.of(this.deviceuuid);
}
}).do((deviceuuid) => {
// some code...
})
}
关于 get() 的第 3 步:
import { Observable } from 'rxjs';
import Storage from 'react-native-storage';
import AsyncStorage from '@react-native-community/async-storage';
let storage = new Storage({
size: 1000,
storageBackend: AsyncStorage,
defaultExpires: null,
})
export default class StorageService {
set(key, value) {
console.log('StorageService set');
return Observable.fromPromise(storage.save({ key: key, data: value })).map(() => value);
}
get(key) {
console.log('It is a ', storage.load({key: key})); // It is a Promise
return Observable.fromPromise(storage.load({key: key})).map(() => value);
}
remove(key) {
return Observable.fromPromise(storage.remove({key: key})).catch(() => Observable.of(null))
}
}
StorageService.shared = new StorageService();
我正在寻找答案,有人说是因为rxjs 6.0以上,所以我尝试使用
import { from } from 'rxjs';
return from(storage.load({key: key})).map(() => value);
它仍然显示
TypeError: _rxjs.from.fromPromise is not a function
或
_rxjs.from().map is not a function.
如有任何帮助,我们将不胜感激。
我知道评论中已经有一些提示,但我会提供一个答案,为答案提供更多背景信息。
对于 RxJS 6,在使用 RxJS 运算符(例如 map 和 switchMap)时的做法是使用 pipe
实用程序,而不是将运算符点链接起来。您可以在 here.
以您的示例为基础,例如,如果您想同时使用 map
和 filter
运算符,而不是像
from(storage.load({key: key})).map(() => value).filter(value => value)
RxJS 6 将要求您改为这样做:
from(storage.load({key: key}))
.pipe(
map(() => value),
filter(value => value),
.subscribe(res => {
console.log(res);
// do the rest here
})