你可以在 async.series 函数中使用 async await 吗?
我做了一些简单的实验,但它们没有按预期工作。
是的你可以! 但是不要使用回调,只需返回一个值或抛出错误即可。 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 选项不是异步的好模式。 你现在是否在异步路线图上?
有一些疯狂的科学计划。 😉
(或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
最有用的评论
有一些疯狂的科学计划。 😉