使用 Async.parallel 我的参数的生命周期不会超过使用 MongoDB 的 NodeJS 中的异步调用

Using Async.parallel my parameter's life-span isn't outliving the asynchronous calls in NodeJS using MongoDB

本文关键字:MongoDB NodeJS 调用 异步 我的 parallel Async 参数 生命 周期 使用      更新时间:2023-09-26

由于以下代码是异步的,我相信'recipeData'数组的寿命不足以超过异步回调,所以我在全局数组中复制了数据,但我仍然收到相同的错误"类型错误:无法读取未定义的属性'_id'"。这是代码:

var tempArray;
function getAllRecipes( db, callback )
{
    query( db, {}, 'recipes', function( err, recipeData )
    {
        tempArray = recipeData.slice();
        if( err || !tempArray.length )
            callback( err );
        else
        {
            var taskArr = [];
            for( var i=0; i < tempArray.length; i++ )
            {               
                taskArr.push( function( iCallback )
                {
                    getRecipeNotes( db, tempArray[ i ]._id, function( err2, noteData )
                    {
                        if( err2 )
                            iCallback( err2 );
                        tempArray[ i ].notes = noteData;
                        iCallback();
                    });
                });
            }
            taskArr.push( function( err3 )
            {
                callback( err3, tempArray );
            });
            async.parallel( taskArr );
        }
    });
}

错误发生在调用"getRecipeNotes"时。

有人可以帮我找出我出错的地方吗?

谢谢。

另一种选择是使用 let i 代替 var i。不过,它是一个较新的功能(由去年发布的 ES6 标准化),并且在浏览器支持方面有一些限制。– 乔纳森·洛诺夫斯基 2 天前

let被Node 4.x及更高版本支持,前提是你"使用strict";以及(这是V8目前施加的临时限制)。如果您使用的是较低版本(0.12.x 等),--harmony 命令行标志可能会启用它。– 乔纳森·洛诺夫斯基 2 天前