Ошибка типа: _rxjs.Observable.fromPromise не является функцией - PullRequest
0 голосов
/ 30 октября 2019

Я использую rxjs в React Native. Я звоню Observable.fromPromise(storage.load({key: key})).map(() => value); показывает ошибку.

Моя версия rxjs:

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

У меня есть три шага.

Step1:

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

Step3 о get ():

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.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 30 октября 2019

Я понимаю, что на комментарии уже есть некоторые подсказки, но я предоставлю ответ, чтобы дать больше контекста для ответа.

Для RxJS 6, практика, когда дело доходит до работы с операторами RxJS (такие как map и switchMap) будут использовать утилиту pipe, а не расставлять точки операторов. Вы можете прочитать больше об изменениях в здесь .

Опираясь на свой пример, например, если вы хотите использовать операторы 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
  })
...