Async: 您可以将 async.series 与 async / await 一起使用吗?

创建于 2017-11-04  ·  11评论  ·  资料来源: caolan/async

你可以在 async.series 函数中使用 async await 吗?

我做了一些简单的实验,但它们没有按预期工作。

docs question

最有用的评论

有一些疯狂的科学计划。 😉

所有11条评论

是的你可以! 但是不要使用回调,只需返回一个值或抛出错误即可。 http://caolan.github.io/async/global.html

好的 - 请原谅我如果我误解了什么😄像这样?

    const result = await async.each(openFiles, async (file) => {
        try: {
            await asyncOperation(file);
            return null
        } catch(err) {
            return err
        }
    })

由于async函数会自动将错误转换为拒绝,除非您想对错误进行特殊处理,否则您的示例可以简化为:

    const result = await async.each(openFiles, async (file) => {
        await asyncOperation(file);
    })

感谢您改进的片段。 它似乎在一个简单的场景中工作,但在以下设置中我无法让它工作:

for (const tasks of fileTasks) {
    const result = await async.each(tasks, async (file) => {
        await asyncOperation(file);
    })
}

我的理解是 for-of 循​​环将允许异步操作?

因为async.each不返回一个 Promise,所以你不能await它。

啊好吧。 因此,使用 for-of async/await 选项不是异步的好模式。 你现在是否在异步路线图上?

有一些疯狂的科学计划。 😉

util.promisify() 😉

(或pify()

为什么这从关于async.series变成了async.each

const _async = require('async');
const _ = require('lodash');

public doSomething = async(num) : Promise<any> => {
     return num*num + 1;
} 

public async getResults() {
    let results = new Array<any>();
    let tasks = [];

    try {
      const list = [1,2,3,4,5,6,7,8,9,10];

      list.forEach((item) => {
        tasks.push((callback) => {
          this.doSomething(item.then(
            (res) => {
              results.push(res);
              callback(null, res);
            }
          );
        })
      })

      results = await new Promise((resolve) => {
        _async.series(tasks, (err, res) => {
          console.log(res);
          if (err) {
            results.push(err);
          }
          resolve(results);
        })
      });
    } catch (err) {
      results.push(err.message);
      console.log(err);
    }

    return _.join(results, '\r\n');
  }



@aearly嘿,你能告诉我哪个特别版本支持 async/await 吗?
我正在使用 caolan/async 版本 2.6.0

此页面是否有帮助?
0 / 5 - 0 等级