0

I think my solution is in this question but I can't get it to work Promise.all behavior with RxJS Observables?

I'm trying to return an observable on two promises via forkJoin.

One promise gets an ID from the server and another processes a file to generate a thumbnail.

export function createSceneFromFile(action$) {
  return action$.ofType(CREATE_SCENE_FROM_FILE)
    .mergeMap(({locationId,file}) =>
      createSceneThumb(locationId,file)
        .map((res,preview) => {
          console.log(res,preview)
          if (res.error) {
            return { type: CREATE_SCENE_FAILED, payload: res.message }
          } else {
            return {type: CREATE_SCENE_SUCCESS, payload:  {...res.payload,preview} }
          }
        })
        .catch(err => { return { type: CREATE_SCENE_FAILED, message: err } })
    )
}

function createSceneThumb(locationId,file){

  const request = fetch(`${API_URL}/location/${locationId}/createscene/${file.name}/`, {
    method: 'get',
    credentials: 'include',
  }).then(res => res.json())

  const thumb = fileToScenePreview(file)

  return Observable.forkJoin(request,thumb)
}


export function fileToScenePreview(file){
  return new Promise((resolve,reject)=>{
    getFileThumb(file).then((canvas)=> {
      canvas.toBlob((blob) => {
        blob.lastModifiedDate = new Date()
        blob.name = 'scenepreview_' + file.name + '.png'

        const uploader = new S3Upload({
          getSignedUrl: getSignedUrl,
          uploadRequestHeaders: {'x-amz-acl': 'public-read'},
          contentType: 'image/png',
          scrubFilename: (filename) => filename.replace(/[^\w\d_\-.]+/ig, ''),
          contentDisposition: 'auto',
          s3path: 'assets/',
          onError:()=>reject,
          onFinishS3Put: ()=>resolve(blob.name),
        })
        uploader.uploadFile(blob)
      })
    })
  })
}

But i never get a response.

Is this the right way of going about it?

beek
  • 3,522
  • 8
  • 33
  • 86

0 Answers0