2

我用rxjsReact Native. 我打电话Observable.fromPromise(storage.load({key: key})).map(() => value);显示错误。

我的 rxjs 版本:

"rxjs": "^6.5.3",
"rxjs-compat": "^6.5.3",

我有三个步骤。

第1步:

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...

})

Step2 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()的Step3:

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.

任何帮助,将不胜感激。

4

1 回答 1

2

我知道评论中已经有一些提示,但我会提供一个答案来为答案提供更多背景信息。

对于 RxJS 6,使用 RxJS 运算符(例如 map 和 switchMap)时的做法是使用该pipe实用程序,而不是使用点链接运算符。您可以在此处阅读有关更改的更多信息。

例如,如果您想同时使用mapandfilter运算符,而不是执行类似的操作,则以您的示例为基础

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
  })
于 2019-10-30T03:29:01.070 回答