首页 > 解决方案 > 如何在变量为假时继续调用函数

问题描述

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

我的代码看起来像这样,我知道它不完整,因为这是我卡住的地方。每次迭代 100 多个项目时,我需要将pageLeftOffSet1 递增,直到没有可迭代的内容可以在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() 

标签: javascriptnode.js

解决方案


您可以通过传递当前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); 

推荐阅读