Redux Observable:如何 return promise 中的一个动作?
Redux Observable: How to return an action inside promise?
我有史诗:
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.
是有原因的。
我如何将回调包装在一个可观察对象中,这样史诗就不会中断?
可能是这样的:
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 的回答之外,在您的示例中,实际问题似乎是您并没有真正 return 承诺!您需要 return 它或切换到对箭头
使用隐式 return 语法
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);
})
});
这是一个很常见的错误,我们都遇到过!
我有史诗:
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.
是有原因的。
我如何将回调包装在一个可观察对象中,这样史诗就不会中断?
可能是这样的:
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 的回答之外,在您的示例中,实际问题似乎是您并没有真正 return 承诺!您需要 return 它或切换到对箭头
使用隐式 return 语法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);
})
});
这是一个很常见的错误,我们都遇到过!