在这种情况下,我将如何使用 javascript 创建一个 promise 函数

How would i create a promise function in this situation with javascript

我目前正在使用 angularjs 构建应用程序并使用 mediafire javascript SDK 来执行一些任务。

现在我遇到的情况是,当发生上传时,我需要创建一个文件夹,此功能 returns 'folderkey'。现在为了让我的控制器中的代码保持干净,我想在我的服务功能上使用 .then 来继续上传新文件的过程。

我已经做了一些研究,但我仍然对我将如何做感到困惑。也许以我的情况为例可以帮助我理解需要做什么。

目前运行此功能用于我的服务,它将创建一个文件夹。

mediafireService.createFolder('TestFolder');

我想要

 mediafireService.createFolder('TestFolder');
    .then(function(folderkey){
       //Upload file into that folder
    });

这是我的工厂函数。

  function createFolder(folderName){

     var options = { foldername: folderName };

     login(function(){
       app.api('folder/create', options, function(data) {
         console.log(data.response.folderkey);
         return data.response.folderkey;
       });
     });

  }

   function login(callback){

     app.login({
       email: 'email',
       password: 'pass'
     }, callback);

   };

阅读周围我不完全确定 javacript 本身是否具有此功能,或者我们是否必须为此使用外部服务。此刻有点迷失了。

如有任何帮助,我们将不胜感激, 谢谢

基本上您还没有在服务的 createFolder 功能中创建任何承诺。您可以使用 $q 依赖项构建您的自定义承诺。

Return 从方法延迟承诺并根据服务器回复解决或拒绝该承诺。

服务

function createFolder(folderName) {
  var deferred = $q.defer();
  var options = {
    foldername: folderName
  };
  login(function() {
    app.api('folder/create', options, function(data) { //success
      console.log(data.response.folderkey);
      //this line will promise resolve
      //also it will send the folderKey to the consumer method.
      deferred.resolve(data.response.folderkey); 
    }, function(data) { //error
      //this line will promise reject with error msg
      deferred.reject('error ocurred');
    });
  });
  return deferred.promise;
};

控制器

mediafireService.createFolder('TestFolder').then(function(folderkey){
   //Upload file into that folder
}, function(error){
   //error handling
});