2015-11-05 20 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; 

只是一個想法,考慮到這是異步。