迭代一个.JSON时使用Promise.all()?

时间:2016-06-23 16:02:20

标签: javascript json sqlite promise

我有一个带有几种不同类型数据结构的.JSON,我用一组for循环迭代,每个for循环都有一个异步函数在它上面运行 - 即在SQLite数据库上插入 - 但我想要等到所有for循环的所有插入都完成。这是一个这样的循环:

for (let i = 0; i < data.json().products.length; i++) {
    this.product.addItem(data.json().products[i]);
}

这是addItem函数:

addItem(product){        
    this.productsSQL.query('INSERT INTO ...').then((data) => {
    ...
    }, (error) => {
    ...
    });
}

我想我必须将addItem更改为:

addItem(product){        
    return this.productsSQL.query('INSERT INTO ...').then((data) => {
        return true;
    }, (error) => {
        return false;
    });
}

然后每个循环我需要使用promise.all()但是我还需要一个将所有循环放在一起的promise.all()?

1 个答案:

答案 0 :(得分:1)

基本上创建一个promises数组并将代码更新为以下代码:

var promises = [];
for (let i = 0; i < data.json().products.length; i++) {
    promises.push(this.product.addItem(data.json().products[i]));
}


Promise.all(promises).then((data) => {
        return true;
    }, (error) => {
        return false;
    });

让addItem返回一个承诺:

addItem(product){        
    return this.productsSQL.query('INSERT INTO ...');
}