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

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

本文关键字:javascript 创建 一个承诺 函数 何使用 这种情况下      更新时间:2023-09-26

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

现在我的情况是,当上传发生时,我需要创建一个文件夹,此函数返回一个"文件夹键"。现在,为了保持控制器中的代码干净,我想在我的服务函数上使用 .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依赖项构建自定义承诺。

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

服务

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