变量为假时如何继续调用函数

时间:2018-08-17 14:16:05

标签: javascript node.js

我正在尝试创建一个脚本,该脚本允许我从数据库API中删除项目,但这需要我对页面进行分页。我的问题是,在收到第一页(100个项目)后,如何继续调用删除功能。

我的代码看起来像这样,我知道它是不完整的,因为这就是我遇到的问题。每当我遍历100多个项目时,我需要将pageLeftOffSet递增1,直到没有任何要遍历的内容products.meta.page.total

为止
function deleteAllProducts() {
    let pageLeftOffSet = 0;
    Moltin.Products.Sort('created_at')
        .Limit(100)
        .Offset(pageLeftOffSet)
        .All()
        .then(products => {
            while (products.meta.page.total > 0) {
                products.data.forEach((prod, index) => {
                    if (index == 100) {
                        pageLeftOffSet++
                    } else {
                        Moltin.Products.Delete(prod.id)
                            .then(success => {}).catch(err => {
                                console.log(err)
                            })
                    }
                })
            }
        })
}

deleteAllProducts() 

1 个答案:

答案 0 :(得分:0)

您可以通过传递当前的pageLeftOffset + 1来递归调用函数。

// take offset as param
function deleteAllProducts(pageLeftOffset) {

    Moltin.Products.Sort('created_at')
        .Limit(100)
        .Offset(pageLeftOffSet)
        .All()
        .then(products => {
            while (products.meta.page.total > 0) {
                products.data.forEach((prod, index) => {
                    if (index == 100) {

                        // recursive call
                        deleteAllProducts(pageLeftOffset + 1);

                    } else {
                        Moltin.Products.Delete(prod.id)
                            .then(success => {}).catch(err => {
                                console.log(err)
                            })
                    }
                })
            }
        })
}

// initial call with offset=0
deleteAllProducts(0);