繁体   English   中英

我如何使用递归 function 在 javascript 中推送数组

[英]How could I use the Recursion function to push array in javascript

我正在尝试使用递归 function 来推送 tempList 中的数据,但是无论如何修复代码仍然是一个空数组。

let tempList=[]
var getWineList =  function(database_name,locaDataBase){
    return new Promise(async (sucess,fail)=>{


        wineList(0,database_name)
        console.log(tempWineList)
        sucess("a")
    })
}

function wineList(currentPosition,database_name){

    let wines= db.collection(database_name)
    .skip(currentPosition)
    wines.get()
        .then((res)=>{


            // tempList.forEach(function(wine,index){
            //  tempWineList.push(wine)
            // })

            if(res.data.length<20){
                console.log(res.data)
                return res.data

            }
            tempWineList.push(res.data)
            return tempList.push(wineList(currentPosition+20,database_name))
        })


}

方法wines.get()是异步的。 这意味着它不会立即返回值,但它只返回 promise - promise 它将在未来返回值。 在您的代码中,您推送到内部的数组then ,因此它不会立即执行,但是当 promise 将被解析时,但在getWineList function 内部您无需等待它发生并在推送该数据之前执行console.log .

所以解决方案是从wineList function 返回 promise 并在执行控制台日志之前等待。 您可以通过 2 种方式执行此操作:通过then()async / await

使用async / await的示例:

let tempList=[]
var getWineList =  async function(database_name,locaDataBase){
    await wineList(0,database_name)
    console.log(tempWineList)
    return "a";
}

function wineList(currentPosition,database_name){

    let wines = db.collection(database_name)
    .skip(currentPosition);

    let res = await wines.get();

    if(res.data.length<20){
        console.log(res.data)
        return res.data
    }
    tempWineList.push(res.data)
    return tempList.push(wineList(currentPosition+20,database_name))
})

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM