异步系列内的异步瀑布

hyp*_*ack 2 asynchronous node.js

可以在async.waterfall里面使用async.series吗?

因此,例如,说我有一个模块api有两种方法,api.getapi.post接着又模块,下载从S3存储图像,调整其大小,然后把它放回S3桶,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) {
      ......
});
Run Code Online (Sandbox Code Playgroud)

但它永远不会触发api.post并死亡S3.put.为什么?

off*_*ert 8

绝对是可能的.我一直在做同样的事情.它可能会有点乱,所以这是值得注意的事情.

您的代码未被调用的原因是您需要将瀑布包装在另一个函数中.目前您拥有外部async.series的方式会尝试调用async.waterfall的结果,这可能不会返回一个函数.

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) {
  ......
});
Run Code Online (Sandbox Code Playgroud)