Javascript 用于将块发送到数据库的循环节点的异步

Javascript 用于将块发送到数据库的循环节点的异步,javascript,node.js,Javascript,Node.js,我需要循环到一个对象数组中,将块发送到服务器以存储在数据库中。就像这个简化的例子: (async function () { var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; var i, j, block, chunk = 3; for (i=0, j=array.length; i<j; i+=chunk) { block = array.slice(i,i+chunk); console.d

我需要循环到一个对象数组中,将块发送到服务器以存储在数据库中。就像这个简化的例子:

(async function () {
    var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    var i, j, block, chunk = 3;
    for (i=0, j=array.length; i<j; i+=chunk) {
        block = array.slice(i,i+chunk);
        console.dir(block);
        //Some async promise to do the magic
    }
})();

我怎样才能像第二个循环那样将第一个循环转换成块呢?还有比sintax更好的方法吗?

您可以使用wait和for。。假设数据库写入函数返回一个承诺,则按顺序写入数据库

如果您愿意,也可以使用标准for循环

const rows=[…数组(5).keys()].map(n=>`entry${n+1}`);
函数writeToDatabaseMock(){
返回新承诺(resolve=>setTimeout(resolve,1000));
}
(异步函数(){
for(行的常量[索引,元素]).entries(){
log(`Writing element#${index+1}到数据库:`,element);
等待writeToDatabaseMock();
}

})();您只需将变量
块范围设置为
即可克服闭包问题

(async function () {
    var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for (let i=0, j=array.length, block, chunk = 3; i<j; i+=chunk) {
            block = array.slice(i,i+chunk);
            console.dir(block);
            //Some async promise to do the magic
    }
})();
(异步函数(){
var数组=[0,1,2,3,4,5,6,7,8,9];
对于(设i=0,j=array.length,block,chunk=3;i
(异步函数(){
var数组=[0,1,2,3,4,5,6,7,8,9];
var i,j,chunk=3;

对于(i=0,j=array.length;ii如果你有一个承诺,只需在它上面打上一个
wait
——你已经在一个
async
函数中了。否则,使用
promise.all
。没有理由传统的for循环会失败,而for-of循环不会失败。提供一个哦,我明白了。我会在剩下的循环中记住这一点。谢谢
(async function () {
    var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    for (let i=0, j=array.length, block, chunk = 3; i<j; i+=chunk) {
            block = array.slice(i,i+chunk);
            console.dir(block);
            //Some async promise to do the magic
    }
})();
(async function () {
    var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    var i, j, chunk = 3;
    for (i=0, j=array.length; i<j; i+=chunk) {

        //Now block variable is block-scope
        let block = array.slice(i,i+chunk);

        console.dir(block);
        //Some async promise to do the magic
    }
})();