【问题标题】:Redux Observable: How to return an action inside promise?Redux Observable:如何在 Promise 中返回一个动作?
【发布时间】:2017-09-16 17:26:49
【问题描述】:

我有一部史诗:

export default function uploadImage(action$, store) {
  return action$.ofType(userActions.UPLOAD_IMAGE)
    .mergeMap(action => {
      ...
      RNFetchBlob.fs.readFile(uploadUri, 'base64').then(data => {
        firebaseRef.putString(data).then(snapshot => {
          console.log('Uploaded a blob or file!');
          return Observable.of(userActions.updateImageURL(snapshot.downloadURL)); //<----------
        })
      });
    })
};

但是,这会引发 You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable. 的原因。

我如何将回调封装在一个 observable 中,这样史诗就不会中断?

【问题讨论】:

    标签: rxjs redux-observable


    【解决方案1】:

    除了 Maxime 的回答之外,在您的示例中,实际问题似乎是您并没有真正返回 Promise!您需要返回它或切换到使用箭头的隐式返回语法

    export default function uploadImage(action$, store) {
      return action$
        .ofType(userActions.UPLOAD_IMAGE)
        .mergeMap(action => {
          return Observable // don't forget to return this chain!
            .fromPromise(RNFetchBlob.fs.readFile(uploadUri, 'base64'))
            .map(data => {
              firebaseRef.putString(data).then(snapshot => {
                console.log('Uploaded a blob or file!');
                return userActions.updateImageURL(snapshot.downloadURL);
              })
            });
    

    这是一个很常见的错误,我们都经历过!

    【讨论】:

      【解决方案2】:

      大概是这样的:

      export default function uploadImage(action$, store) {
        return action$
          .ofType(userActions.UPLOAD_IMAGE)
          .mergeMap(action => {
            ...
            Observable
              .fromPromise(RNFetchBlob.fs.readFile(uploadUri, 'base64'))
              .map(data => {
                firebaseRef.putString(data).then(snapshot => {
                  console.log('Uploaded a blob or file!');
                  return userActions.updateImageURL(snapshot.downloadURL);
                })
              });
      

      【讨论】:

      • 嘿@Maxime!如果我有多个依赖于先前承诺结果的承诺,我会嵌套Observable.fromPromise 吗?
      • 不,这是 promise(和 observables)的重点。您可以将它们链接起来:)
      猜你喜欢
      • 2017-10-07
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      相关资源
      最近更新 更多