0

我目前正在使用 angularjs 构建一个应用程序,并使用 mediafire javascript SDK 来完成一些任务。

现在我处于上传发生时我需要创建一个文件夹的情况,这个函数返回一个'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 是否本机具有此功能,或者我们是否必须为此使用外部服务。此刻有点迷失了。

任何帮助将不胜感激,谢谢。

4

1 回答 1

2

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

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

服务

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
});
于 2016-01-16T10:54:19.303 回答