简体   繁体   English

如何使函数兑现承诺

[英]How to make a function return a promise

I want to return downloadURL when this function is called, it's a firebase upload function. 我想在调用此函数时返回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 }; 

I tried this, it doesn't return the downloadURL 我试过了,它没有返回downloadURL

you can simply try it as follows: 您可以简单地尝试如下操作:

  1. import the file where you need. 将文件导入您需要的位置。
  2. Then call the function with the relevant params. 然后使用相关参数调用该函数。
  3. Use then method in promises to get the resolved downloadUrl 在promise中使用then方法来获取已解决的downloadUrl

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

Try this. 尝试这个。

         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);
        });
      ,
    );
  });
}

Idea is to include resolve method once the getDownloadURL is succeeded. 想法是,一旦成功完成getDownloadURL,便包括resolve方法。 Then this can be retrieved by calling as mentioned in the above answer 然后可以通过调用上面的答案中提到的来检索

     uploadFile(file, metaData)
     .then((download) => console.log(downloadURL)) ; // Or whatever you want to do wth downloadURL

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM