Как заставить функцию вернуть обещание - PullRequest
0 голосов
/ 05 марта 2019

Я хочу вернуть downloadURL, когда эта функция вызывается, это функция загрузки в Firebase.

import { storage } from "./base";
import firebase from "firebase";

function uploadFile(file, metadata) {
  return new Promise((resolve, reject) => {
    const task = storage.child(`/${file.name}`).put(file, metadata);

    task.on(
      firebase.storage.TaskEvent.STATE_CHANGED,
      function(snapshot) {
        var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
        console.log(progress);
      },
      function(error) {
        switch (error.code) {
          case "storage/unauthorized":
            break;
          case "storage/canceled":
            break;
          case "storage/unknown":
            break;
          default:
            break;
        }
        reject(error);
      },
      function() {
        task.snapshot.ref.getDownloadURL().then(function(downloadURL) {
            resolve(downloadURL);
          console.log(downloadURL);
        });
      },
    );
  });
}

export { uploadFile };

Я пробовал это, оно не возвращает downloadURL

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Попробуй это.

         import { storage } from "./base";
         import firebase from "firebase";

         function uploadFile(file, metadata) {
          return new Promise((resolve, reject) => {
          const task = storage.child(`/${file.name}`).put(file, metadata);

          task.on(
           firebase.storage.TaskEvent.STATE_CHANGED,
            function(snapshot) {
             var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
        console.log(progress);
      },
      function(error) {
        switch (error.code) {
          case "storage/unauthorized":
            break;
          case "storage/canceled":
            break;
          case "storage/unknown":
            break;
          default:
            break;
        }
        reject(error);
      },
        task.snapshot.ref.getDownloadURL().then(function(downloadURL) {
            resolve(downloadURL);
          console.log(downloadURL);
        });
      ,
    );
  });
}

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

     uploadFile(file, metaData)
     .then((download) => console.log(downloadURL)) ; // Or whatever you want to do wth downloadURL
0 голосов
/ 05 марта 2019

Вы можете просто попробовать это следующим образом:

  1. импортировать файл туда, где вам нужно.
  2. Затем вызвать функцию с соответствующими параметрами.
  3. Используйте then метод в обещаниях, чтобы получить решенный downloadUrl

    uploddFile(file, data).then(downloadUrl => console.log(downloadUrl) );

...