首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有异步操作的nodejs - async.each函数每次迭代

具有异步操作的nodejs - async.each函数每次迭代
EN

Stack Overflow用户
提问于 2021-07-18 19:40:38
回答 1查看 68关注 0票数 2

我有一个关于async.each行为的问题。考虑一下守则:

代码语言:javascript
复制
const examples = [1,2];

const asyncTask = (index) => {
    return new Promise(resolve => {
        setTimeout(() => {
            console.log(`Inside setTimeout-${index}`);
            resolve(true);
        }, 1500)
    });
}

function testingAsyncEach(callback){
    async.each(examples, (example, innerCallback) => {
        asyncTask(example).then(isDone => {
            console.log(`isDone: ${isDone}`);
            innerCallback(null);
        });
    }, err => {
        console.log('done testingAsyncEach');
        return callback()
    })
}

testingAsyncEach(() => {console.log('final callback testingAsyncEach');})

一个简单的代码,使用nodejs中的“异步”模块,使用数组1,2,并对数组中的每个项执行函数"asyncTask“,该函数返回一个新的承诺,在超时1.5秒后得到解析。

在这个场景中,程序的输出是:

代码语言:javascript
复制
Inside setTimeout-1
isDone: true
Inside setTimeout-2
isDone: true
done testingAsyncEach
final callback testingAsyncEach

但是,当我将"testingAsyncEach“函数更改为使用”等待“语法时:

代码语言:javascript
复制
function testingAsyncEach(callback){
    async.each(examples, async (example, innerCallback) => {
        const isDone = await asyncTask(example);
        console.log(`isDone: ${isDone}`);
        innerCallback(null);
    }, err => {
        console.log('done testingAsyncEach');
        return callback()
    })
}

async.each没有等待"asyncTask“的结束。产出:

代码语言:javascript
复制
Inside setTimeout-1
isDone: true
done testingAsyncEach
final callback testingAsyncEach 
Inside setTimeout-2
isDone: true

你能帮我理解为什么用“等待”而不是“然后”来改变行为吗?我如何才能仍然使用“等待”语法并获得适当的输出?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-18 20:00:50

根据异步模块的文档,如果您传递一个async函数,它将不会将innerCallback传递给您的函数。因此,我认为您的innerCallback(null)调用出错了,使得async.each提前返回。(第二个例子已经“启动”了,所以以后还会发生)

检查err是否设置为错误,如果是,记录它。

如果这是问题所在,删除innerCallback参数和调用就可以解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68432526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档