Javascript 如何仅在异步命令完成后才在阵列中循环?

Javascript 如何仅在异步命令完成后才在阵列中循环?,javascript,mongoose,Javascript,Mongoose,我需要把35件东西存到猫鼬身上。在上一个完成之前,我不想保存下一个 我尝试了下面的代码,但没有成功 function loopData(array){ let i = array.length - 1; while( i >= 0){ delete array[i]['date']; delete array[i]['saved']; let article = array[i]; DBM.saveArticle(article).then(() =

我需要把35件东西存到猫鼬身上。在上一个完成之前,我不想保存下一个

我尝试了下面的代码,但没有成功

function loopData(array){
  let i = array.length - 1;
  while( i >= 0){
    delete array[i]['date'];
    delete array[i]['saved'];
    let article = array[i];
    DBM.saveArticle(article).then(() => {
      i--;
      console.log('article saved', i)
    });
  }
}
我尝试了这一点,但它不起作用,因为myLoop不被认为是异步的:

function loopData(array){
  for( let i = array.length - 1 ; i-- ; i >= 0){
    delete array[i]['date'];
    delete array[i]['saved'];
    let article = array[i];
    await myLoop(i, article);
  }
}

async function myLoop(i, article) {
  let response = await DBM.saveArticle(article);
  console.log('article saved', i);
}

您可以通过递归实现相同的效果

function loopData(array){
    DBM.saveArticle(array[0]).then(() => {
        if(array.length > 1) {
            loopData(array.slice(1));
        }
    })
}

这个版本的方法接受一个数组,保存第一个元素,然后用剩余的元素(如果有的话)调用自己。

我喜欢它,但是你能用wait和async来做吗?@j.a.为什么?