异步系列中的异步瀑布
Async waterfall inside async series
是否可以在 async.series
中使用 async.waterfall
?
例如,假设我有一个模块 api
,它有两种方法,api.get
和 api.post
,然后另一个模块从 S3 存储桶下载图像,调整它的大小,然后放回S3 bucket,resizer
.
我想用 api.get
发出一个获取请求并获取一个 oauth
令牌,然后触发 resizer
然后才触发 api.post
。我不需要在 api
和 resizer
之间传递任何结果。
到目前为止我有这样的东西:
async.series([
function get (callback) {
api.get(callback)
},
async.waterfall([
function download (callback) {
S3.get({...}, callback);
},
function transform (response, callback) {
gm(..)
.resize(....)
.toBuffer(...) {
S3.put({...})
}, callback;
]),
function post (callback) {
api.post(callback)
}
], function (err) {
......
});
但它永远不会触发 api.post
并在 S3.put
之后消失。为什么?
你不能在 series
中间调用 waterfall
,主要是因为 waterfall
没有 return 任何事物和系列期望函数作为任务,所以你正在打破链条。
根据您发布的示例,我不明白您为什么需要两者,使用 series
应该就足够了。
绝对有可能。我一直在做同样的事情。它可能会变得有点混乱,因此需要注意这一点。
您的代码未被调用的原因是您需要将瀑布包装在另一个函数中。目前,你的外部 async.series 会尝试调用 async.waterfall 的结果,这可能不是 return 函数。
async.series([
function get(callback) {
api.get(callback)
},
function(callback) {
async.waterfall([
function download(callback1) {
S3.get({...
}, callback1);
},
function transform(response, callback1) {
//transform stuff here
return callback1();
},
function post(callback1) {
api.post(callback1)
}
], callback);
}
], function(err) {
......
});
是否可以在 async.series
中使用 async.waterfall
?
例如,假设我有一个模块 api
,它有两种方法,api.get
和 api.post
,然后另一个模块从 S3 存储桶下载图像,调整它的大小,然后放回S3 bucket,resizer
.
我想用 api.get
发出一个获取请求并获取一个 oauth
令牌,然后触发 resizer
然后才触发 api.post
。我不需要在 api
和 resizer
之间传递任何结果。
到目前为止我有这样的东西:
async.series([
function get (callback) {
api.get(callback)
},
async.waterfall([
function download (callback) {
S3.get({...}, callback);
},
function transform (response, callback) {
gm(..)
.resize(....)
.toBuffer(...) {
S3.put({...})
}, callback;
]),
function post (callback) {
api.post(callback)
}
], function (err) {
......
});
但它永远不会触发 api.post
并在 S3.put
之后消失。为什么?
你不能在 series
中间调用 waterfall
,主要是因为 waterfall
没有 return 任何事物和系列期望函数作为任务,所以你正在打破链条。
根据您发布的示例,我不明白您为什么需要两者,使用 series
应该就足够了。
绝对有可能。我一直在做同样的事情。它可能会变得有点混乱,因此需要注意这一点。
您的代码未被调用的原因是您需要将瀑布包装在另一个函数中。目前,你的外部 async.series 会尝试调用 async.waterfall 的结果,这可能不是 return 函数。
async.series([
function get(callback) {
api.get(callback)
},
function(callback) {
async.waterfall([
function download(callback1) {
S3.get({...
}, callback1);
},
function transform(response, callback1) {
//transform stuff here
return callback1();
},
function post(callback1) {
api.post(callback1)
}
], callback);
}
], function(err) {
......
});