如何使用javascript

时间:2016-01-16 10:44:29

标签: javascript angularjs promise mediafire

我目前正在使用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本身是否具有此功能,或者我们是否必须使用外部服务。此刻有点丢失。

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

1 个答案:

答案 0 :(得分: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
});