Javascript返回一个函数,还得到一个变量

时间:2015-11-05 21:39:03

标签: 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, ...])的干净外观。

非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

尝试设置并检查具有特定名称或特定对象的全局变量吗?

window.specialobject.specialvariable = 'something';

然后在完成后删除变量?

delete window.specialobject.specialvariable;

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