2015-11-05 64 views
0

我不知道如何正确地句话吧,所以我就放弃的例子:的Javascript返回功能,同时也获得了可变

我有表现为这样的发电机的功能:

function generateSomething(app) { 
    return new Promise(function (resolve, reject) { 
     var cookie; 

     var login = function (async_cb) { 
      // Ajax call to login 
      // This would return a cookie that I need to use for subsequent calls 
     } 

     var generate = function (async_cb) { 
      // This will use the cookie returned from login 
     } 

     async.series([ 
      login, 
      generate, 
      generate, 
      generate, 
      function() { 
       resolve(); 
      } 
     ]); 
    }); 
} 

我将有许多生成器文件,并且它们中有许多类似的功能(例如,login)。所以我宁愿将它重构成一个全球帮助类。我也非常喜欢async库,因为它是干净的格式。

这里谈到我的问题...

重构的login功能,我有:

var Helper = {}; 
module.exports = Helper; 

Helper.login = function (app) { 
    return function (async_cb) { 
     // Ajax to login 
     // Once done, call 
     aysnc_cb(); 
    } 
} 

而且我会用它在我的发生器功能:

var Helper = require('./helper'); 
function generateSomething(app) { 
    return new Promise(function (resolve, reject) { 
     var cookie; 

     var generate = function (async_cb) { 
      // This will use the cookie returned from login 
      // Once done, call 
      aysnc_cb(); 
     } 

     async.series([ 
      Helper.login(app), 
      generate, 
      generate, 
      generate, 
      function() { 
       resolve(); 
      } 
     ]); 
    }); 
} 

虽然问题是如何在这个例子中返回cookie?我意识到我会使用Promise并将结果返回resolve()但这意味着我无法使用async.series([Helper.login, ...])的整洁外观。

帮助表示赞赏。

回答

1

我知道的,从单一功能返回两个对象/值的唯一方法是返回一个数组,或命名值对象:

return { 'fn':yourobject, 'variable':cookie } 
+0

唯一的问题是,在执行函数登录并返回结果后,变量被设置为异步 – Kousha

0

尝试设置设置,并检查了一个全局变量具体名称还是在某个对象内?

window.specialobject.specialvariable = 'something'; 

然后在完成后删除变量?

delete window.specialobject.specialvariable; 

只是一个想法,考虑到这是异步。