我不知道如何正确地说出来,所以我只是举个例子:
我的生成器函数表现如下:
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, ...])
的干净外观。
非常感谢帮助。
答案 0 :(得分:1)
我知道从单个函数返回两个对象/值的唯一方法是返回一个数组或具有命名值的对象:
return { 'fn':yourobject, 'variable':cookie }
答案 1 :(得分:0)
尝试设置并检查具有特定名称或特定对象的全局变量吗?
window.specialobject.specialvariable = 'something';
然后在完成后删除变量?
delete window.specialobject.specialvariable;
只是一个想法,考虑到这是异步。